GCMパッケージに付属しているgcm-demo-clientサンプルアプリケーションを見ると、次のパターンが使用されていることがわかります。
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
// Register application with GCM
} else {
// Device is already registered on GCM, check server.
if (GCMRegistrar.isRegisteredOnServer(this)) {
// Skip registration.
} else {
// Try to register again on server
}
}
しかし、何らかの理由で、アプリケーションが以前にGCMとアプリケーションサーバーに正常に登録され、GCMから正常に登録解除されたが、アプリケーションサーバーからは登録解除されなかった場合、アプリケーションは最初に登録を解除せずにアプリケーションサーバーに再登録しようとします。右?したがって、パターンは次のようにすべきではありません。
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
// Check if device was previously registered with application server
if (GCMRegistrar.isRegisteredOnServer(this)) {
// Unregister on application server
}
// Register application with GCM
} else {
// Device is already registered on GCM, check server.
if (GCMRegistrar.isRegisteredOnServer(this)) {
// Skip registration.
} else {
// Try to register again on server
}
}