com.google.android.c2dm.intent.REGISTRATION被弃用了吗?

11

简短版:意图com.google.android.c2dm.intent.REGISTRATION是否仍在使用或已被GCM完全废弃?

较长版:Google的gcm-demo-client在其过滤器中声明了此意图,但是,如果我按照相同的过程操作,当我调用gcm.register()并且我的广播接收器由于REGISTRATION过滤器而接收到附加的注册ID时,我会得到有效的注册ID,而这第二个注册ID是虚假的(我无法向其发送任何通知)。

此时,我考虑删除REGISTRATION过滤器(仅保留RECEIVE),但我想确保我没有错过协议中的重要内容。


1
据我所记,至少在2012年底被弃用了。 - mangusta
1
这也是我的怀疑,但它仍然存在于官方的Google演示中,这让我想知道这是否属实。此外,GCM注册方法无法处理Google决定向您的应用程序发送新的注册ID的情况(通过广播接收器处理REGISTRATION意图来处理此场景,就像C2DM曾经做过的那样)。 - Cedric Beust
如果您从代码中调用gcm.register()并删除REGISTRATION过滤器,我并不认为您会失去什么。 - mangusta
当然,除非新的注册ID将经常发送并且在您的应用程序中广泛使用。 - mangusta
3个回答

5
您的一小部分用户可能无法收到注册ID。 https://blog.pushbullet.com/2014/02/12/keeping-google-cloud-messaging-for-android-working-reliably-techincal-post/ 教训2:即使创建了有效的注册ID,也要准备好在某些设备上重复失败
这个提示有些奇怪,可能已经不再相关,但我无法确认GCM中的错误是否已被修复。错误的原因是:无论您调用register()多少次,都会在某些设备上失败并抛出异常。尽管register()抛出异常,但仍会创建一个有效的注册ID,但不会返回该ID。要获取此注册ID,请将以下权限添加到您的GCM BroadcastReceiver的IntentFilter中:
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

我喜欢GCM。=)

4
即使对于最新的GCM版本(也称为GCM 3),官方GCM文档警告需要这个权限才能支持旧设备上的推送

如果您想要支持 Android 4.4 KitKat 之前的旧设备,请在接收器的 Intent Filter 声明中添加以下操作:<action android:name="com.google.android.c2dm.intent.REGISTRATION" />


2
你可能正在查看官方Google演示的旧版本。 当前版本不使用com.google.android.c2dm.intent.REGISTRATION,你可以在这里看到:
    <receiver
        android:name=".GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.google.android.gcm.demo.app" />
        </intent-filter>
    </receiver>

确实。我不确定为什么会得到一个旧的,因为我认为我是从你指向的那个地方获取的。新的注册仍然无法处理 Google 在背后更改您的注册 ID 的情况,因为 GCM 服务器现在已无法通知您的应用程序,但我猜想在 GCM 方法可以处理它之前他们不会这样做。谢谢。 - Cedric Beust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接