
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдПрдВрдбреНрд░реЙрдЗрдб рдиреЗ
C2DM (рдХреНрд▓рд╛рдЙрдб рдЯреВ рдбрд┐рд╡рд╛рдЗрд╕ рдореИрд╕реЗрдЬрд┐рдВрдЧ) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ
рдкреБрд╢ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди 26 рдЬреВрди рдХреЛ, рдЗрд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ Google рджреНрд╡рд╛рд░рд╛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирдпрд╛
GCM (Google рдХреНрд▓рд╛рдЙрдб рдореИрд╕реЗрдЬрд┐рдВрдЧ) рдЖрдпрд╛ред
рдЗрд╕реА рддрд░рд╣ рдХреЗ рдирд╛рдоред рд╡рд╣реА рднреВрдорд┐рдХрд╛ред рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?
- GCM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Google API рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рд┐рдВрдкрд▓ API рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреАред
- GCM рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░реЗрд╖рдХ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ C2DM рдореЗрдВ рдИрдореЗрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЖрдк рдЗрд╕реЗ Google API рдХрдВрд╕реЛрд▓ рдпрд╛ URL рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
code.google.com/apis/console/#project:{SENDER_ID}
- GCM рд╕реВрдЪрдирд╛рдПрдВ рд╕рд╛рджреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИрдВред
- GCM рдПрдХ рд╕рд╛рде рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред
- рдЕрдм рдПрдХ рдкрдВрдЬреАрдХрд░рдг рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрдкрдХрд░рдг рдПрдХ рд╕рд╛рде рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдЕрдзрд┐рд╕реВрдЪрдирд╛рдУрдВ рдореЗрдВ рдЕрдм 4 рд╕рдкреНрддрд╛рд╣ рддрдХ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреАрд╕реАрдПрдо рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдкреНрддрд┐ рдХреА рддрд╛рд░реАрдЦ рддрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
- рдЕрдм рдЖрдк рдкреЗрд▓реЛрдб рдХреЗ рд╕рд╛рде 4K рддрдХ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЪреИрдЯ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдмреИрдЯрд░реА рдХреЛ рдЕрдзрд┐рдХ рдордЬрдмреВрддреА рд╕реЗ рдЦрд╛рдПрдЧреАред
- рдЕрдм рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рдкрдВрдЬреАрдХрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреИрдиреЛрдирд┐рдХрд▓ рдкрдВрдЬреАрдХрд░рдг рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬреАрд╕реАрдПрдо рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрдВрдЬреАрдХрд░рдг рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкреБрд░рд╛рдиреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ GCM рдХреИрдиреЛрдирд┐рдХрд▓ (рдЕрдВрддрд┐рдо) рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреБрд░рд╛рдиреЗ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред
GCM рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдореИрдирд┐рдлреЗрд╕реНрдЯ рд╕реЗ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджрд░реНрдЬ рдХрд░рдиреА рд╣реЛрдВрдЧреА:
<uses-permission android:name="android.permission.WAKE_LOCK"/> <permission android:name="{package}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="{package}.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
рдлрд┐рд░ рд░рд┐рд╕реАрд╡рд░ рдФрд░ рд╕реЗрд╡рд╛:
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="{package}" /> </intent-filter> </receiver> <service android:name=".GCMIntentService" />
{{рдкреИрдХреЗрдЬ} рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рд╕реЗ рдмрджрд▓реЗрдВ (рдореЗрд░реЗ рдкрд╛рд╕ com.habrahabr.gcm рд╣реИ)рдлрд┐рд░, рдкреИрдХреЗрдЬ рдХреА рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ GCMIaseIntentService рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА GCMIntentService рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ :
package {package}; import android.app.Activity; import android.app.IntentService; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.google.android.gcm.GCMBaseIntentService; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; public GCMIntentService() { super(GCMConfig.SENDER_ID); } @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "Device registered");
рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдЕрдм рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реНрд╡рдпрдВ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдкрд░рд┐рдгрд╛рдореА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдбGCM рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрд╡рд▓реЛрдХрдиGcm рдЙрдиреНрдирдд рд╡рд┐рд╖рдп