android Gcm registrationID 与 Parse 等 3rd 方库冲突

Posted

技术标签:

【中文标题】android Gcm registrationID 与 Parse 等 3rd 方库冲突【英文标题】:android Gcm registrationID conflicts with 3rd party library like Parse 【发布时间】:2015-05-07 11:05:50 【问题描述】:

我有一个使用我的 gcm 提供程序的简单项目,并且我想实现解析库来为所有用户发送推送。但我有一个关于这种情况的问题。当我用我的 GCMSenderID 注册 gcm 时,我得到了 registrationID,然后 Parse 用它的默认 GCMSenderID(1076345567071) 注册了 gcm。然后我意识到从我的 gcm 提供程序获取的 regID 已将解析推送表写入为 deviceToken。出于这个原因,我认为,我无法通过解析向所有设备发送推送消息。 我使用解析快速入门实现也从 parse.com/docs/push_guide#top/android 进行了一些研究。 我该如何解决这个冲突?

这是我的实现:

AndroidManifest.xml

    <service android:name="com.parse.PushService" />

    <meta-data
        android:name="com.parse.push.notification_icon"
        android:resource="@drawable/icon" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <receiver
        android:name=".gcm.GcmBroadcastReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="xxx.android" />
        </intent-filter>
    </receiver>


    <receiver android:name="com.parse.ParseBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver
        android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="xxxx.android" />
        </intent-filter>
    </receiver>
    <receiver
        android:name=".gcm.ParseReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="com.parse.push.intent.RECEIVE" />
            <action android:name="com.parse.push.intent.DELETE" />
            <action android:name="com.parse.push.intent.OPEN" />
        </intent-filter>
    </receiver>

Application.java

    Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
    Parse.initialize(this, ParseAPPLICATION_ID, ParseCLIENT_KEY);                    
    ParseInstallation.getCurrentInstallation().saveInBackground();

Parse 使用其默认发件人 ID 来请求 GCM 注册令牌:特别是,SDK 将在启动时使用 Parse 的发件人 ID (1076345567071) 自动注册您的应用以进行推送,并将生成的注册 ID 存储在的 deviceToken 字段中应用程序的当前 ParseInstallation。 (来自 parse.com/docs/push_guide#top/Android)。因此,在启动时请求 GCM 令牌的 2 次注册,我的问题是:我如何确定哪个 regToken Parse 接收与我的 GCM 实现/客户端接收哪个 regToken?理论上他们可能会混淆?

【问题讨论】:

【参考方案1】:

我通过调用注册多个发件人解决了这个问题:

GoogleCloudMessaging.getInstance(this).register(YOUR_GCMSENDERID,  PARSE_DEFAULT_GCM_SENDERID);

PARSE_DEFAULT_GCM_SENDERID = 1076345567071

【讨论】:

非常感谢您的回答,Parse Default senderID 发挥了重要作用。干杯伙伴

以上是关于android Gcm registrationID 与 Parse 等 3rd 方库冲突的主要内容,如果未能解决你的问题,请参考以下文章

Android:GCM 错误 - 字符串/gcm_defaultSendorid 错误:重复资源错误

将com.google.android.gcm.GCMBaseIntentService升级到com.google.android.gms.gcm.GoogleCloudMessaging

Android - GCM 在打开应用程序时收到来自 gcm 的通知

获取通知密钥错误 401 gcm https://android.googleapis.com/gcm/googlenotification

对于某些 android 设备,GCM 消息在 GCM 服务器上停留在“已接受”状态

com.google.android.gcm.GCMBaseIntentService 在哪里?