
ä»æ¥ã¯ããã®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, - API Jackson JSON processor MetrikaApi api = ApiFactory.createMetrikaAPI( "05dd3dd84ff948fdae2bc4fb91f13e22", new JacksonMapper());
ããã«ãäœæãããã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠãä»»æã®æäœãå®è¡ã§ããŸãã
// Counter[] myCounters = api.getCounters(); // Counter newCounter = new Counter(); newCounter.setSite("mysite.ru"); newCounter.setName(" "); Counter createdCounter = api.createCounter(newCounter); // createdCounter , , , // , Id System.out.println(createdCounter.getId()); // api.deleteCounter(createdCounter.id);
ã¬ããŒãã䜿çšãã
ã¡ããªãã¯ã«ååšããã»ãšãã©ãã¹ãŠã®ã¬ããŒãã¯ã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ã«éä¿¡ããã¬ããŒããè¿ããŸãã
// " " id=2138128 ReportBuilder builder = api.makeReportBuilder(Reports.contentPopular, 2138128); // ( ) Report report = builder.withDateFrom(MetrikaDate.yesterday()) .withDateTo(MetrikaDate.today()) .build();
ã¬ããŒãã¯ãçµæãšããã€ãã®è¿œå æ å ±ïŒåèšãã¬ããŒããé¢é£ããæ¥ä»ç¯å²ãªã©ïŒãå«ãè¡šã§ããReportãªããžã§ã¯ãã®åœ¢åŒã§è¿ãããŸãã çµæããŒãã«ã®åè¡ã¯ReportItemãªããžã§ã¯ãã§ãããããŒã¿ã¯
getXXX(String fieldName)
ã¡ãœããã®1ã€ã䜿çšããŠååŸã§ããŸãïŒJDBCã䜿çšããå Žåã
ResultSet
ããå€ãååŸããã®ã«äŒŒãŠããŸãïŒã Yandex.Metrica APIã®ããã¥ã¡ã³ãã®åã¬ããŒãã«ã¯ããã£ãŒã«ãåãšè¿ãããè¿œå ããŒã¿ãæå®ããå¿ èŠããããŸãã
// ReportItem[] items = report.getData(); for (ReportItem item : items) { System.out.printf("pageViews: %4d, url: %s", item.getInt("page_views"), item.getString("url")) .println(); }
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 token SharedPreferences String token = getOAuthToken(context); if (token == null) { throw new AuthException(); } else { // org.json, Android api = ApiFactory.createMetrikaAPI(token, new OrgJsonMapper()); } } return api; }
ã¢ããªã±ãŒã·ã§ã³ãåããŠèµ·åãã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()); // preferences getSharedPreferences(Globals.PREF_FILE, 0) .edit() .putString(Globals.PREF_TOKEN, token) .commit(); } }
ããŒã¿æ€çŽ¢
ãŠã£ãžã§ããã®ããŒã¿ååŸã³ãŒãã¯éåžžã«ç°¡åã§ãã
MetrikaApi api = Globals.getApi(context); // Metrika API Report report = api.makeReportBuilder(Reports.trafficSummary, counterId) .withDateFrom(new MetrikaDate()) .withDateTo(new MetrikaDate()) .build(); return new Result(report.getTotals().getInt("visits"));
ãã¥ã¢ã³ã¹ã¯ããã®ã³ãŒãããçŽæ¥ãå®è¡ã§ããªãããšã§ãã 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)); // , listAdapter.notifyDataSetChanged(); } protected Counter[] doInBackground(Void... voids) { return Globals.getApi(WidgetSetupActivity.this).getCounters(); } }
ãŠã£ãžã§ããã®å ŽåãããŒã¿ã®æäœã¯ããå°ãè€éã§ãã ãŸããããŠã£ãžã§ãããæŽæ°ããæéãã€ãã³ããåãåããŠã£ãžã§ãããããã€ããŒã¯ã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)) { // Internet NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if (info != null && info.isConnected() && !info.isRoaming()) { // , , "offline" ... } }
ãŠã£ãžã§ããã®ã€ã³ã¹ããŒã«
ãŠã£ãžã§ããã¯ã MetrikaWidgetãããžã§ã¯ãã«ãããœãŒã¹ã³ãŒãããã³ã³ãã€ã«ã§ããŸãã
ããªãã¯Androidéçºè ã§ã¯ãããŸãããããŠã£ãžã§ããã䜿çšãããã§ããïŒ åé¡ãããŸãã-å®æãããŠã£ãžã§ãããããŠã³ããŒãã§ããŸãã AndroidããŒã±ãããããªãªãŒã¹ãããã GitHubã§ãããã°ãã«ãããŸã ã

ã€ã³ã¹ããŒã«åŸããYãMetrikaãã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããŸããããã¯ãå®éã«ã¯ãŠã£ãžã§ããã®ããã€ã³ã¹ãã©ã¯ã·ã§ã³ã§ãã