- PVSM.RU - https://www.pvsm.ru -
Ранее в Android использовался C2DM [1] (Cloud to Device Messaging), как сервис доставки Push-уведомлений [2] на устройство. Но 26 июня он был официально отменен гуглом. На его место пришел новый GCM [3] (Google Cloud Messaging).
https://code.google.com/apis/console/#project:{SENDER_ID}
Сначала нужно прописать разрешения:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<permission android:name="<i>{package}</i>.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="<i>{package}</i>.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="<i>{package}</i>" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
* {package} заменить на ваш пакет (у меня com.habrahabr.gcm)
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");
// Здесь мы должны отправить registrationId на наш сервер, чтобы он смог на него отправлять уведомления
}
@Override
protected void onUnregistered(Context context, String registrationId) {
Log.i(TAG, "Device unregistered");
}
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received new message");
}
@Override
protected void onDeletedMessages(Context context, int total) {
Log.i(TAG, "Received deleted messages notification");
}
@Override
public void onError(Context context, String errorId) {
Log.i(TAG, "Received error: " + errorId);
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
Log.i(TAG, "Received recoverable error: " + errorId);
return super.onRecoverableError(context, errorId);
}
}
// Делаем проверки
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
// Достаем идентификатор регистрации
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) { // Если отсутствует, то регистрируемся
GCMRegistrar.register(this, GCMConfig.SENDER_ID);
} else {
Log.v("GCM", "Already registered: " + regId);
}
Теперь все готово, за исключением отправки самих уведомлений с сервера, но думаю, что для одной статьи этого пока достаточно.
Исходные коды получившегося приложения [4]
GCM Architectural Overview [5]
GCM Advanced Topics [5]
Автор: questman
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/11224
Ссылки в тексте:
[1] C2DM: https://developers.google.com/android/c2dm/
[2] Push-уведомлений: http://ru.wikipedia.org/wiki/Push_(%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F)
[3] GCM: http://developer.android.com/intl/ru/guide/google/gcm/index.html
[4] Исходные коды получившегося приложения: http://rghost.ru/39145068
[5] GCM Architectural Overview: http://developer.android.com/intl/ru/guide/google/gcm/adv.html
Нажмите здесь для печати.