当前位置: 首页 > 知识库问答 >
问题:

在谷歌云消息(GCM)中注册和启动服务的两种方式

雍兴修
2023-03-14

我正在尝试用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();
            }
        }
    }
}

上面的两个过程都有两种方法,我可以用我想用的任何一种方法,这是对的吗?

共有1个答案

通沛
2023-03-14

似乎有两种方法可以将设备注册到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是否特定于设备?当用户更改设备并备份时会发生什么情况? 我试着从文档中读到: 您必须排除任何特定于设备的标识符,无论是由服务器发布的还是在设备上生成的。这包括谷歌云消息(