How does GCM handle apps with BroadCastReceiver
我很难理解
1 2 3 4 5 6 7 8 9 10 | <receiver android:name=".GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <category android:name="com.gcmexample" /> </intent-filter> </receiver> |
这是一个封闭源代码的实现,因此我不确定,但是我假设您在服务器端使用的注册令牌包含Google系统建立连接所需的信息。换句话说,是将云中的GCM服务或电话中的Play服务客户端将注册令牌及其关联的发件人ID与应用的程序包名称相关联。
当您的应用进行注册以获取其推送通知令牌时,您需要执行以下操作:
1 2 3 | InstanceID instanceID = InstanceID.getInstance(this); String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); |
请在此处查看完整示例:
https://developers.google.com/instance-id/
因此,尽管我不能100%确定(因为它是封闭源),但是当您注册GCM令牌时,Google可能会传递您应用程序的软件包名称。为了让您收到推送通知,Google GCM服务器可以简单地将软件包名称与通知本身一起发送。然后,您设备上的Google Play服务应用会收到此通知,并将其路由到您设备上的正确应用。
由于InstanceID机制,这可能不是全部显式发生,但最终还是会发生。
我认为有关该主题的两个答案都可以回答您的问题。
简而言之:获取API密钥时,您应该已将应用程序的程序包名称和发行签名密钥的SHA-1签名提供给Google控制台。其余的通过Play服务完成。