å°ãåãŸã§ãYandex.Metricaã¯
ãç¬èªã®ããã°ã©ã ããMetricaã®ã»ãŒãã¹ãŠã®æ©èœã«ã¢ã¯ã»ã¹ã§ãã
ãªãŒãã³APIãçºè¡šããŸã
ã ã
ä»æ¥ã¯ããã®APIã®äœ¿çšãšãããã«åºã¥ããŠAndroidããã€ã¹çšã®ã·ã³ãã«ãªãŠã£ãžã§ãããäœæããæ¹æ³ã«ã€ããŠå°ãã話ããããšæããŸãã
APIã®åºæ¬
Yandex.Metrica APIã¯RESTã®ååã«åºã¥ããŠæ§ç¯ãããŠããŸãã APIãä»ããŠå¶åŸ¡ã§ãããã¹ãŠã¯ãã«ãŠã³ã¿ãŒãç®æšããã£ã«ã¿ãŒãªã©ã®ãªãœãŒã¹ã§è¡šãããŸãã ãªãœãŒã¹ã®æäœïŒèªã¿åããåé€ãå€æŽïŒã¯ãI.Metrica APIãµãŒããŒãžã®HTTPãªã¯ãšã¹ãã«ãã£ãŠå®è¡ãããåã¿ã€ãã®æäœã«ã¯ç¬èªã®HTTPã¡ãœããããããŸãã
- GETïŒã³ã³ãã³ãã®èªã¿åã
- POSTïŒãªãœãŒã¹ã®è¿œå
- PUTïŒãªãœãŒã¹ã®å€æŽ
- DELETEïŒãªãœãŒã¹ãåé€ããŸã
ããšãã°ãã«ãŠã³ã¿ãŒã®ãªã¹ããååŸããã«ã¯ãã«ãŠã³ã¿ãŒãªãœãŒã¹
GET /counters
ãåç
§ããå¿
èŠããã
GET /counters
ã 1ã€ã®ã«ãŠã³ã¿ãŒã«é¢ããæ
å ±ãååŸããã«ã¯ããã®èå¥åã§ãªãœãŒã¹ãåç
§ããŸãïŒ
GET /counter/{id}
ã åé€ããã«ã¯ãåããªãœãŒã¹ãåç
§ããŸãããDELETEã¡ãœããã䜿çšããŸãïŒ
DELETE /counter/{id}
ã
RESTåŒã³åºãã®å
¥åãšçµæã¯ãXMLãšJSONã®2ã€ã®åœ¢åŒã§ãšã³ã³ãŒãã§ããŸãã å°æ¥çã«ã¯ãããã°ã©ãã³ã°èšèªã§äœ¿çšãããæ§é ã«è¡šç€ºããããã®ãããã³ã³ãã¯ãã§äŸ¿å©ãªåœ¢åŒãšããŠJSONã䜿çšããŸãã
åœç¶ãAPIã䜿çšããäœæ¥ã¯ãYãMetrikaã¢ã«ãŠã³ãããã¢ã¯ã»ã¹ãããã«ãŠã³ã¿ãŒã§ã®ã¿å¯èœã§ãã OAuthèªèšŒã¯ãã¢ã«ãŠã³ãææè
ãèå¥ããããã«äœ¿çšãããŸãã ãšãŠãã·ã³ãã«ã«é
眮ãããŠããŸãã Yandex.Metrica APIã䜿çšããéçºè
ã¯ãã¢ããªã±ãŒã·ã§ã³ãç»é²ãïŒ
æé ãåç
§ïŒãã¢ããªã±ãŒã·ã§ã³èå¥åãåãåããŸãã ã¢ããªã±ãŒã·ã§ã³ãç»é²ããåŸãã¢ããªã±ãŒã·ã§ã³
çšã®ãããã°OAuthããŒã¯ã³ãååŸããMetrica APIã®æäœãããã«éå§ã§ããŸãã ãããã°ããŒã¯ã³ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãç»é²ããéçºè
ã¢ã«ãŠã³ãããå©çšå¯èœãªã«ãŠã³ã¿ãŒãæäœã§ããŸãã ããŒã¯ã³ã¯ãURLã®è¿œå ãã©ã¡ãŒã¿ãŒïŒ
...&oauth_token=<acces_token>
ïŒãšããŠããŸãã¯HTTPèŠæ±
Authorization: OAuth <access_token>
...&oauth_token=<acces_token>
ã®ããããŒãšããŠãåHTTPèŠæ±ã§éä¿¡ããå¿
èŠããããŸãã
éçºè
ãå©çšã§ããã«ãŠã³ã¿ãŒã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ãä»»æã®ã«ãŠã³ã¿ãŒã§åäœããããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒããšã«åå¥ã®OAuthããŒã¯ã³ãå¿
èŠã§ãã ã©ãããã°å
¥æã§ããŸãïŒ
- æãå®å
šãªæ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠãŠãŒã¶ãŒãç¹å¥ãªYandexããŒãžã«ãªãã€ã¬ã¯ããããŠãã°ã€ã³ããïŒãŸã ããããŠããªãå ŽåïŒã«ãŠã³ã¿ãŒãžã®ã¢ã¯ã»ã¹ãã¢ããªã±ãŒã·ã§ã³ã«äžããããšã§ãã ãã®åŸããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã«ãªãã€ã¬ã¯ãããããªãã€ã¬ã¯ãå
ã®URLã«ã¯ããã®ãŠãŒã¶ãŒã®OAuthããŒã¯ã³ãå«ããã©ã¡ãŒã¿ãŒãå«ãŸããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãã®ãã©ã¡ãŒã¿ãŒãèªã¿åããããŒã¯ã³ãèšæ¶ããå¿
èŠããããŸãã ãã®æé ã®è©³çŽ°ã¯ã ããã¥ã¢ã«ã«èšèŒãããŠããŸã ã
- ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒãããŠãŒã¶ãŒåãšãã¹ã¯ãŒããçŽæ¥èŠæ±ããããããYandexãµãŒããŒã®OAuthã«æž¡ããå¿çã§ããŒã¯ã³ãåä¿¡ããããšã«ãããããŒã¯ã³ãåä¿¡ããããšãã§ããŸãã ãã®æ¹æ³ã¯å®å
šæ§ãäœããªããŸãããã°ã€ã³ãšãã¹ã¯ãŒããæ瀺çã«èŠæ±ããã³éä¿¡ãããŸãã
RESTã䜿çšããããšã«ãããAPIã䜿çšããæãç°¡åãªæäœïŒèªã¿åãèŠæ±ïŒããã³ãŒãã£ã³ã°ãªãã§ãã©ãŠã¶ãŒããçŽæ¥å¯èœã«ãªããŸãã ããšãã°ã
ãã®ãªã¯ãšã¹ãã§ã¯ãI.Metrica APIã®ãã¢ã¢ã«ãŠã³ãã®ã«ãŠã³ã¿ãŒã«é¢ããæ
å ±ã衚瀺ãããŸãã
ãã®ãããªèŠæ±ã¯ãã«ãŠã³ã¿ãŒã®åºåžã«é¢ããã¬ããŒããäœæããŸãã
RESTã€ã³ã¿ãŒãã§ãŒã¹ã¯åçŽã§ãããé«çŽèšèªã§æžãããããã°ã©ã ã§APIãå®å
šã«äœ¿çšããã«ã¯ããªã¯ãšã¹ãURLã®çæãHTTPãªã¯ãšã¹ãã®éä¿¡ãšçµæã®åä¿¡ãJSONã®çæãšè§£æããšã©ãŒåŠçãªã©ãéåžžã«å€ãã®ãžã§ã¹ãã£ãŒãå®è¡ããå¿
èŠããããŸãã ç§ã®äººçãç°¡çŽ åããããã«ãJavaã®I. Metrics APIãæäœããããã®æ¢è£œã®ã©ã€ãã©ãª
Metrika4jãäœæããŸãã ã ã©ã€ãã©ãªã³ãŒãã¯Apacheã©ã€ã»ã³ã¹ã®äžã§é
åžãããŸããå¿
èŠã«å¿ããŠèªç±ã«å€æŽããã³è£è¶³ã§ããŸãã 次ã«ããã®ã©ã€ãã©ãªã䜿çšããŠããµã€ããã©ãã£ãã¯ã衚瀺ããAndroidããã€ã¹çšã®ãŠã£ãžã§ãããäœæããæ¹æ³ã説æããŸãã
ã¡ããªã«4j
Metrika4jã䜿çšãããšãYandex.Metricaã䜿çšããŠãããªãã¿ã®Javaã®æŠå¿µïŒã¯ã©ã¹ãé¢æ°åŒã³åºããåïŒãæäœããHTTPããã³JSONã§ã®äœã¬ãã«ã®äœæ¥ãèæ
®ããå¿
èŠããªããªããŸãã ã©ã€ãã©ãªã®äžå¿çãªã€ã³ã¿ãŒãã§ãŒã¹ã¯
MetrikaApiã§ãã ã¡ããªãã¯ã®äž»èŠãšã³ãã£ãã£ã§ããã«ãŠã³ã¿ãŒãšã¬ããŒããæäœããã¡ãœããããããŸãã è¿œå ã®ãšã³ãã£ãã£ïŒç®æšããã£ã«ã¿ãŒãªã©ïŒã®æäœã¯ãã¡ã€ã³ã®
MetrikaApi
ã¯ã©ã¹ããååŸããåå¥ã®ããAPIã§è¡ãããŸãã
ã¡ãœããã®æ§é ã¯ãIãMetrica APIãžã®RESTåŒã³åºãã®æ§é ã«ã»ãŒå¯Ÿå¿ããŠããŸãã RESTåŒã³åºãã«æž¡ãããåŒæ°ã¯ãAPIã¡ãœããã«æž¡ãããåŒæ°ã«å¯Ÿå¿ããŸãïŒã¬ããŒãAPIãé€ããŸããããã«ã€ããŠã¯å¥é説æããŸãïŒã
Metrika4jã¯ãJSONãæäœããããã®æšæºã®2ã€ã®ã©ã€ãã©ãªã
Jackson JSONããã»ããµãš
org.jsonããµããŒãããŠããŸãã ãžã£ã¯ãœã³ã®å Žåãorg.jsonã®æ©èœã®100ïŒ
ããµããŒããããŸããããã¯ãã¬ããŒããæäœããããã«æäœéå¿
èŠãªãã®ã§ããã«ãŠã³ã¿ãŒã®ãªã¹ããèªã¿åããã¬ããŒããåä¿¡ããŸãã org.jsonã©ã€ãã©ãªãŒã¯Andriod APIã«çµã¿èŸŒãŸããŠãããããAndroidã¢ããªã±ãŒã·ã§ã³ã«äŸ¿å©ã§ãã å¿
èŠã«å¿ããŠãéçºè
ã¯
JsonMapperããã³
JsonObjectã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããããšã«ãããä»ã®JSONã©ã€ãã©ãªã䜿çšã§ããŸãã
Metrika4jã䜿çšãã
æåã«ã
MetrikaApi
ã䜿çšããŠ
MetrikaApiã®ã€ã³ã¹ã¿ã³ã¹ãäœæããå¿
èŠããããŸãã äœææã«ã¯ããŠãŒã¶ãŒOAuthããŒã¯ã³ãæž¡ãå¿
èŠããããŸãã
ããã«ãäœæãããã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠãä»»æã®æäœãå®è¡ã§ããŸãã
ã¬ããŒãã䜿çšãã
ã¡ããªãã¯ã«ååšããã»ãšãã©ãã¹ãŠã®ã¬ããŒãã¯ãAPIãä»ããŠå©çšã§ããŸãã 䜿çšå¯èœãªã¬ããŒãã®ã»ããã¯ã
Reportsã¯ã©ã¹ã«å«ãŸããŠããŸãã éžæããã¬ããŒããäœæããã«ã¯ã
MetrikaApi.makeReportBuilder(Reports report, int counterId)
ã¡ãœãã
MetrikaApi.makeReportBuilder(Reports report, int counterId)
åŒã³åºãå¿
èŠããããŸãã
MetrikaApi.makeReportBuilder(Reports report, int counterId)
ã¡ãœããã¯ãç¹å¥ãªãªããžã§ã¯ãã§ãã
ReportBuilderã¬ããŒã
ãã«ããŒãè¿ããŸãã ã¬ããŒããã«ããŒã§ãå¿
èŠãªã¬ããŒããã©ã¡ãŒã¿ãŒïŒæéééã䞊ã¹æ¿ããªã©ïŒãèšå®ããå¿
èŠããããŸãã ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãèšå®ããããã
ReportBuilder.build()
ã¡ãœãããåŒã³åºããŸãããã®ã¡ãœããã¯HTTPèŠæ±ãMetrics APIã«éä¿¡ããã¬ããŒããè¿ããŸãã
ã¬ããŒãã¯ãçµæãšããã€ãã®è¿œå æ
å ±ïŒåèšãã¬ããŒããé¢é£ããæ¥ä»ç¯å²ãªã©ïŒãå«ãè¡šã§ãã
Reportãªããžã§ã¯ãã®åœ¢åŒã§è¿ãããŸãã çµæããŒãã«ã®åè¡ã¯
ReportItemãªããžã§ã¯ãã§ãããããŒã¿ã¯
getXXX(String fieldName)
ã¡ãœããã®1ã€ã䜿çšããŠååŸã§ããŸãïŒJDBCã䜿çšããå Žåã
ResultSet
ããå€ãååŸããã®ã«äŒŒãŠããŸãïŒã Yandex.Metrica APIã®ããã¥ã¡ã³ãã®åã¬ããŒãã«ã¯ããã£ãŒã«ãåãšè¿ãããè¿œå ããŒã¿ãæå®ããå¿
èŠããããŸãã
Metrika4jã®æäœã®è©³çŽ°ãªèª¬æã¯ã
Javadocã«ãããŸãã
ã¢ã³ããã€ãçšãŠã£ãžã§ãã
Yandex.MetricaãMetrika4j APIãªã©ã®åŒ·åãªããŒã«ãèªç±ã«äœ¿çšã§ãããããYandex.Metricaã®ä»£æ¿ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæãããŸã§ãããããåé¡ã解決ã§ããŸãã ãã ãããã®èšäºã®æ çµã¿ã®äžã§ãããæ§ãããªç®æšã«éå®ããŸããã€ãŸãããµã€ããžã®çŸåšã®ãã©ãã£ãã¯ã衚瀺ããAndroidçšã®ãŠã£ãžã§ãããäœæããŸãã ãŠã£ãžã§ããã®ãœãŒã¹ã³ãŒãã¯ã
MetrikaWidgetãããžã§ã¯ãã®GitHubã§å
¥æã§ããŸãã Metrika4jã³ãŒããšåæ§ã«ãæå°éã®ã©ã€ã»ã³ã¹å¶éã§èªç±ã«é
åžãããŸãã
OAuthèªèšŒ
MetrikaApi
ãšèªèšŒãäœæããããšããå§ããŸãããã ã¢ããªã±ãŒã·ã§ã³ã¯1ã€ã®ã¢ã«ãŠã³ãã®ã¿ã§æ©èœããããã
MetrikaApi
ã€ã³ã¹ã¿ã³ã¹ãã·ã³ã°ã«ãã³ã«ã§ããŸãã ãã®ã³ãŒãã¯ã
Globalsã¯ã©ã¹ã«å«ãŸããŠããŸãã
private static MetrikaApi api; public static synchronized MetrikaApi getApi(Context context) { if (api == null) {
ã¢ããªã±ãŒã·ã§ã³ãåããŠèµ·åããOAuthããŒã¯ã³ããŸã SharedPreferencesã«ãªãå Žåã¯ãååŸããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãããŒã¯ã³ãªã¯ãšã¹ãURLã«ã¢ã¯ã»ã¹ããŸãã
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://oauth.yandex.ru/authorize?response_type=token&client_id=1359488e196b4bfa92615d0885b106d4")); startActivity(intent);
ãŠãŒã¶ãŒã«ãšã£ãŠã¯ãéããããŒãžã®ããã«ãªããŸãããã¢ããªã±ãŒã·ã§ã³ã¯Yandexã®ããŒã¿ãžã®ã¢ã¯ã»ã¹ãèŠæ±ããŠããŸããã ãŠãŒã¶ãŒãæ£åžžã«ãã°ã€ã³ããã¢ã¯ã»ã¹ãèš±å¯ãããšæ³å®ããŸãã 次ã«ã楜ãã¿ãå§ãŸããŸããããŒã¯ã³ãWebã€ã³ã¿ãŒãã§ãŒã¹ããã¢ããªã±ãŒã·ã§ã³ã«è»¢éããæ¹æ³ã¯ïŒ ãããè¡ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã¯ãã£ããã£ã®1ã€ããã¢ããªã±ãŒã·ã§ã³ã«åºæã®ãããã³ã«ã®ãã³ãã©ãŒãšããŠç»é²ããå¿
èŠããããŸãïŒãã³ãã©ãŒãä»ã®ã¢ããªã±ãŒã·ã§ã³ãšéè€ããªãããã«ç¹å®ããŸãïŒã
AndroidManifest.xml
ã次ãæå®ããŸãã
<activity android:name="ru.metrikawidget.AuthTokenActivity" android:label="OAuth"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="metwd" android:host="oauthtoken"/> </intent-filter> </activity>
ãoauthtokenãæ¬äŒŒãã¹ãã®ãmetwdããããã³ã«ãã³ãã©ãšããŠ
AuthTokenActivityãç»é²ã
ãŸãã ã ãã
ã§ãç»é²æžã¿ã¢ããªã±ãŒã·ã§ã³ã®èšå®ã§ã³ãŒã«ããã¯URI
metwd://oauthtoken
ãæå®ããã ãã§ååã§ãããŠãŒã¶ãŒã®OAuthèªèšŒãæåãããšã
AuthTokenActivity
ãåŒã³åºãããŸãã ãã®ã¢ã¯ãã£ããã£ã§ã¯ãåä¿¡ããæååã解æããSââharedPreferencesã«ããŒã¯ã³ãä¿åããå¿
èŠããããŸãã
String fragment = getIntent().getData().getFragment(); String[] parts = fragment.split("\\&"); for (String part : parts) { if (part.startsWith("access_token=")) { String token = part.substring(param.length(), part.length());
ããŒã¿æ€çŽ¢
ãŠã£ãžã§ããã®ããŒã¿ååŸã³ãŒãã¯éåžžã«ç°¡åã§ãã
MetrikaApi api = Globals.getApi(context);
ãã¥ã¢ã³ã¹ã¯ããã®ã³ãŒãããçŽæ¥ãå®è¡ã§ããªãããšã§ãã Metrica APIãµãŒããŒã¯éåžžã«è¿
éã«å¿çããŸãããHTTPèŠæ±èªäœã¯ãµãŒããŒã«éãããäœéã§ä¿¡é Œæ§ã®äœãã¢ãã€ã«éä¿¡ãã£ãã«ãçµç±ããŠæ»ãããšãã§ããŸãã ãã®çµæãå¿çãåŸ
ã£ãŠãããŠã£ãžã§ããã¯Android OSã®èŠ³ç¹ãããããªãŒãºãããäžæãããã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããããšã瀺åãããŠã£ã³ããŠã衚瀺ãããŸãã ããã¯æããã«å¿
èŠãªãã®ã§ã¯ãããŸããã ãããã£ãŠãMetrics APIãžã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯ã
AsyncTaskã¯ã©ã¹ã䜿çšããŠéåæçã«å®è¡ãããŸãã ã«ãŠã³ã¿ãŒãªã¹ããèªã¿èŸŒãããã®ç°¡ç¥åãããã³ãŒãã¯æ¬¡ã®ãšããã§ãïŒãã«ããŒãžã§ã³ã¯
WidgetSetupActivityã¯ã©ã¹ã«ãããŸãïŒã
private class CountersLoadTask extends AsyncTask<Void, Void, Counter[]> { private ProgressDialog progressDialog; protected void onPreExecute() { progressDialog = ProgressDialog.show(...); } protected void onPostExecute(Counter[] counters) { progressDialog.dismiss(); counterList.addAll(Arrays.asList(counters));
ãŠã£ãžã§ããã®å ŽåãããŒã¿ã®æäœã¯ããå°ãè€éã§ãã ãŸããããŠã£ãžã§ãããæŽæ°ããæéãã€ãã³ããåãåããŠã£ãžã§ãããããã€ããŒã¯ãAndroidçšèªã§ã¯
ãããŒããã£ã¹ãã¬ã·ãŒããŒã§ãã æŸéåä¿¡æ©ã®ã©ã€ããµã€ã¯ã«ã¯çããã€ãã³ããåŠçãããã®åŸããã«æ»ã«ãŸãã ã€ãã³ããã³ãã©ãŒããã¹ããªãŒã ãéå§ãããšãã¹ããªãŒã ã®åŠçãå®äºããåã«ã¬ã·ãŒããŒaãåæ¢ããå ŽåããããŸããæ²ãã¿ã§ãã Androidéçºè
ã¬ã€ãã§ã¯ããã®ãããªå Žåã«ãµãŒãã¹ã䜿çšããããšã匷ããå§ãããŸãã ããã§ã¯ããŠã£ãžã§ãããããã€ããŒïŒ
MetrikaWidgetProvider ïŒãã€ãã³ããåãåãããããã
UpdateServiceã«åŠçããããã«æž¡ã
ãŸã ã 次ã«ã
UpdateService
ã
AsyncTask
ãä»ããéåæããŒã¿ã®èªã¿èŸŒã¿ã䜿çšããŸãïŒãã以å€ã®å Žåã¯ãAPIããã®å¿çãé·æéåŸ
æ©ãããšããã¢ããªã±ãŒã·ã§ã³ãå¿çããŠããŸããããŠã£ã³ããŠã衚瀺ãããŸãïŒã
ãŠã£ãžã§ãã衚瀺
Androidã§ãŠã£ãžã§ãããæäœããããšã¯ããã®èšäºã®ç¯å²ãè¶
ããå¥ã®å€§ããªãããã¯ã§ãã
ã Android
éçºè
ã¬ã€ããšè¿œå ã®èšäºã®äž¡æ¹ã§è©³ãã説æ
ãããŠããŸãã ãããã£ãŠãç°¡åã«èª¬æããŸãã詳现ã«ã€ããŠã¯ã
MetrikaWidgetProvider
UpdateService
ãš
UpdateService
ãœãŒã¹ã³ãŒããåç
§ã
UpdateService
ã
ãŠã£ãžã§ããã¯ããããŒã¿åä¿¡ãããããŒã¿æŽæ°ãããéä¿¡ãªããã®3ã€ã®ç¶æ
ã«ãªããŸãã ãŠã£ãžã§ããã¯ãã¿ã€ããŒãŸãã¯ãŠã£ãžã§ãããã¯ãªãã¯ããŠæŽæ°ãããŸãã
- åä¿¡ããããŒã¿ã¯ãä»æ¥ã®ãµã€ããžã®ã¢ã¯ã»ã¹æ°ã衚瀺ãããŠã£ãžã§ããã®éåžžã®ç¶æ
ã§ãã ãã®ç¶æ
ã§ã¯ããŠã£ãžã§ããã¯æšæºã®æ£ã°ã©ã-ãè¹ãã衚瀺ããŸããããã¯ãYandex.Metricaã€ã³ã¿ãŒãã§ãŒã¹ã®ããããŒã«è¡šç€ºãããŸã
- ããŒã¿æŽæ°ã¯äžéç¶æ
ã§ããããŠãŒã¶ãŒã®äŸ¿å®ã®ããã ãã«äœæãããããããŠãŒã¶ãŒã¯ãŠã£ãžã§ãããã¯ãªãã¯ããããšã§èŠèŠçãªãã£ãŒãããã¯ãåãåããŸãã ãŠã£ãžã§ããã¯ãAPIã¡ããªãã¯ã«ãªã¯ãšã¹ããéä¿¡ããåã«ãŠã£ãžã§ããã«å
¥ãããªã¯ãšã¹ããå®äºãããšçµäºããŸãã ãã®ç¶æ
ã§ã¯ãå転ãããè¹ãã衚瀺ãããŸãã
- æ¥ç¶ãªã -çŸåšã®ããŒã¿ãååŸã§ããªãã£ãããšã瀺ãç¶æ
ã 圩床ãäœããã»ãŒç°è²ã®ãè¹ããšããŠè¡šç€ºãããŸãã
ãŠã£ãžã§ããããæ¥ç¶ãªããç¶æ
ã«ãªãå¯èœæ§ãããå ŽåããŠãŒã¶ãŒãå®éã®ããŒã¿ãããã«èŠãããšãã§ããããã«ããã®æ¥ç¶ã衚瀺ããããšãã«ãŠã£ãžã§ãããæŽæ°ããããšã¯è«ççã§ãã ãããè¡ãããã«ããããã€ããŒãŠã£ãžã§ããã¯ããããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¹ããŒã¿ã¹ã®å€åã«é¢é£ããã·ã¹ãã ã€ãã³ãããµãã¹ã¯ã©ã€ãããŸãã
<receiver android:name="ru.metrikawidget.MetrikaWidgetProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED"/> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> ... </receiver>
ãã®ãããªã€ãã³ããåä¿¡ãããšãæ¥ç¶ã衚瀺ããããã©ããã確èªããããã®ãã§ãã¯ãè¡ãããæŽæ°ãåŒã³åºãããŸãã
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
ãŠã£ãžã§ããã®ã€ã³ã¹ããŒã«
ãŠã£ãžã§ããã¯ã
MetrikaWidgetãããžã§ã¯ãã«ãããœãŒã¹ã³ãŒãããã³ã³ãã€ã«ã§ããŸãã
ããªãã¯Androidéçºè
ã§ã¯ãããŸãããããŠã£ãžã§ããã䜿çšãããã§ããïŒ åé¡ãããŸãã-å®æãããŠã£ãžã§ãããããŠã³ããŒãã§ããŸãã
AndroidããŒã±ãããããªãªãŒã¹ãããã
GitHubã§ãããã°ãã«ãã
ãŸã ã
ã€ã³ã¹ããŒã«åŸããYãMetrikaãã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããŸããããã¯ãå®éã«ã¯ãŠã£ãžã§ããã®ããã€ã³ã¹ãã©ã¯ã·ã§ã³ã§ãã