Android рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ GCM рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред

рдЬреАрд╕реАрдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИ?


рдпрд╣ рд╕рд╣реА рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓рд┐рдЦрд╛ред рдЗрд╕ рд╣рдлреНрддреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ , Google рдХреА рдУрд░ рд╕реЗ рдкреБрд╢ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдПрдХ рдирдИ рд╕реЗрд╡рд╛, Habr's GCM рдкрд░ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрджрд┐ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП Google рдХреНрд▓рд╛рдЙрдб рдореИрд╕реЗрдЬрд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдореЗрд░рд╛ рд▓реЗрдЦ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред GCM рдХреЗ рд╕рд╛рде)ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓реЗрдЦрдХ рдЬреАрд╕реАрдПрдо рдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрд░рдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЬрдЧрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛, рдпрд╛ рдЬрд┐рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдХ рдЕрд╕рдВрднрд╡ рдХрд╛рдо рд╕реЗ рдбрд░ рд▓рдЧрддрд╛ рд╣реИред


рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпрд╛рдВ




рдХреНрдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЛрдб (registationId) рдмрджрд▓ рд░рд╣рд╛ рд╣реИ?


рдирдореВрдирд╛ рдЖрд╡реЗрджрди рд╕реЗ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { // Automatically registers application on startup. GCMRegistrar.register(this, SENDER_ID); } 


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╢рд░реНрддреЗрдВ рдирд╣реАрдВ рд╣реИрдВред рддреЛ, рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ: http://developer.android.com/intl/en/guide/google/gcm/adv.html#reg-state , рддреЛ рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрднреА рднреА рдХреНрдпрд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рджреЛ рдорд╛рдорд▓реЗ рд╣реИрдВ:
  1. рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрджреНрдпрддрди
  2. рдПрдХ рдмреИрдХрдЕрдк рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрд╛ред рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛:
 import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.preference.PreferenceManager; public final class ApplicationVersionHelper { public static final String APP_VERSION_PREFS = "application_version"; public static boolean isApplicationVersionCodeEqualsSavedApplicationVersionCode(Context context) { return getApplicationVersionCode(context) == getApplicationVersionCodeFromPreferences(context); } public static int getApplicationVersionCode(Context context) { PackageManager pm = context.getPackageManager(); PackageInfo packageInfo; int applicationVersion = 1; try { packageInfo = pm.getPackageInfo(context.getPackageName(), 0); applicationVersion = packageInfo.versionCode; } catch (NameNotFoundException ignored) { } return applicationVersion; } public static int getApplicationVersionCodeFromPreferences(Context context) { return context.getSharedPreferences(APP_VERSION_PREFS, Context.MODE_PRIVATE).getInt("application_version_code", 0); } public static void putCurrentPackageVersionInPreferences(Context context) { context.getSharedPreferences(APP_VERSION_PREFS, Context.MODE_PRIVATE).edit().putInt("application_version_code", getApplicationVersionCode(context)).commit(); } } 


рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ PreferenceManager.getDefaultSharedPreferences рдирд╣реАрдВ рд╣реИ PreferenceManager.getDefaultSharedPreferences рдорд╛рдзреНрдпрдо рд╕реЗ, рд▓реЗрдХрд┐рди рдирд╛рдорд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред
рдЕрдм рд╣рдореЗрдВ GCM рдФрд░ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕рдлрд▓ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж putCurrentPackageVersionInPreferences рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдкрдВрдЬреАрдХрд░рдг рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:

 final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("") || !isApplicationVersionCodeEqualsSavedApplicationVersionCode(this)) { // Automatically registers application on startup. GCMRegistrar.register(this, SENDER_ID); } 


рдПрдХ рдмреИрдХрдЕрдк рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП (рд╣рд░ рдХреЛрдИ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ - http://developer.android.com/intl/en/guide/topics/data/backup.html ) рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред : рдмрд╕ рдмреИрдХ рдЕрдк рд▓реЗрдиреЗ рдкрд░ рд╕реНрдерд┐рд░ ApplicationVersionHelper.APP_VERSION_PREFS рд╕реЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рди рд╕рд╣реЗрдЬреЗрдВред рддреЛ рдирд╛рдорд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛рдо рдореЗрдВ рдЖрдИ :) рдлрд┐рд░ isApplicationVersionCodeEqualsSavedApplicationVersionCode рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд false рд╕рдордп false рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА рдФрд░ рд╣рдо рдПрдХ рдкрдВрдЬреАрдХрд░рдг рдЕрдиреБрд░реЛрдз рднреЗрдЬ рджреЗрдВрдЧреЗред

GCMIntentService рдореЗрдВ рд╣реИрдВрдбрд▓рд░


GCMIntentService ( GCMBaseIntentService рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╡рд░реНрдЧ)
рд╣рдореЗрдВ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрди рдкрд░:


рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдлрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ!


рдпрджрд┐ рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВ, рдФрд░ рдЕрдкрдиреА рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ onDestroy рд╡рд┐рдзрд┐ рдореЗрдВ GCMRegistrar.onDestroy рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
 @Override protected void onDestroy() { if (registerTask != null) { registerTask.cancel(true); } try { CMRegistrar.onDestroy(this); } catch(Exception ignored) { } super.onDestroy(); } 
registerTask рдпрд╣рд╛рдБ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЬреЙрдм ( AsyncTask ) рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ GCM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ http://developer.android.com/intl/en/guide/google/gcm/index.html (рдФрд░ 5 рдЕрдВрдХ рд╣реИрдВ) рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рд╣реИрдВ (WAKE_LI рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рддреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдбрд░реЛ рдорддред

Source: https://habr.com/ru/post/In147739/


All Articles