我正在尝试用GCM开发一个应用程序。我读了关于GCM的官方文件,但感觉有两种方法可以做到这一点。
似乎有两种方法可以将设备注册到GCM。
"http://developer.android.com/guide/google/gcm/gs.html#android-应用程序“说,
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
} else {
Log.v(TAG, "Already registered");
}
另一方面,“http://developer.android.com/guide/google/gcm/gcm.html#registering”说,
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
// sets the app name in the intent
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", senderID);
startService(registrationIntent);
另外,我觉得有两种方法可以启动处理响应的意图。
"http://developer.android.com/guide/google/gcm/gs.html#android-“应用程序”指示如下:,
"创建com.google.android.gcm.GCMBaseIntentService的子类"
实施
onRegistered(上下文,字符串regId)
onUnregisted(上下文,字符串regId)
onMessage(上下文上下文,意图意图)
...等
而http://developer.android.com/guide/google/gcm/gcm.html#registering"用,,
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public final void onReceive(Context context, Intent intent) {
MyIntentService.runIntentInService(context, intent);
setResult(Activity.RESULT_OK, null, null);
}
}
public class MyIntentService extends IntentService {
private static PowerManager.WakeLock sWakeLock;
private static final Object LOCK = MyIntentService.class;
static void runIntentInService(Context context, Intent intent) {
synchronized(LOCK) {
if (sWakeLock == null) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my_wakelock");
}
}
sWakeLock.acquire();
intent.setClassName(context, MyIntentService.class.getName());
context.startService(intent);
}
@Override
public final void onHandleIntent(Intent intent) {
try {
String action = intent.getAction();
if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
handleRegistration(intent);
} else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
handleMessage(intent);
}
} finally {
synchronized(LOCK) {
sWakeLock.release();
}
}
}
}
上面的两个过程都有两种方法,我可以用我想用的任何一种方法,这是对的吗?
似乎有两种方法可以将设备注册到GCM。
只有真正的方法,这是你的第二种方法。GCM寄存器
在封面下使用第二种方法来实现第一种方法。
另外,我觉得有两种方法可以启动处理响应的意图。
真正的方法只有一种,那就是你的第二种方法GCMBaseIntentService
使用封面下的第二种方法来实现第一种方法——这就是为什么您需要在清单中注册GCM提供的BroadcastReceiver
。
在其他条件相同的情况下,我推荐第一种方法,因为它更简单,可以为您处理各种问题。然而,无论哪种方式都行得通。
我正在尝试,为了实施新的GCM,我遵循Google get声明:http://developer.android.com/guide/google/gcm/gs.html 我被困在获取我的设备注册ID! 我的应用程序一直试图与谷歌服务器连接,这里我的错误日志: 这是我的活动代码,询问身份证: 这是我的服务代码 这是我的Android清单: 我遵循谷歌的指示,但我坚持这个服务不可用的错误, 我做错了
更新:已弃用GCM,请使用FCM 如何将新的Google云消息集成到PHP后端?
我使用新的GCM API来注册。方法的留档明确指出: 为GCM注册应用程序并返回注册ID。安装应用程序后,必须调用此函数一次,然后将返回的注册ID发送到服务器。 重复调用此方法将返回原始注册ID。 然而,在阅读本文时(http://developer.android.com/google/gcm/adv.html#reg-州),它指出有两种情况需要特殊处理: 另外还有两种情况需要特别注意: 应用程
我正在尝试在我的android应用程序中使用GCM服务。 为此,我使用Android留档从http://developer.android.com/guide/google/gcm/gcm.html 我用发送者id等创建了客户端注册过程,并在服务器端应用程序中使用注册id和发送者id发送消息。 当我通过Eclipse在手机中安装应用程序时,推送通知工作正常,因此我的发件人id是正确的。 然后,当我
我正在使用GCM向Android应用程序发送和接收推送通知。我是从这里给出的一个例子中创建这个应用程序的(Android的谷歌云消息GCM和推送通知) 这些是我正在使用的java文件 最终语境=此; shareRegidTask=new AsyncTask() AsyncTask()上出错 通知兼容。Builder mBuilder=new NotificationCompat。建造商( 这).
是否建议使用android云备份来备份GCM id?我将GCM id存储在SharedReferences中,因此我不必继续注册。 如果我备份此GCM sharedpref和用户更改设备,我是否需要将其更新为新的注册id?注册ID是否特定于设备?当用户更改设备并备份时会发生什么情况? 我试着从文档中读到: 您必须排除任何特定于设备的标识符,无论是由服务器发布的还是在设备上生成的。这包括谷歌云消息(