GCM和Parse冲突

时间:2015-11-15 13:46:26

标签: android parse-platform google-cloud-messaging

我在AndroidManifest中有以下内容。我需要从我的webservice和Parse发送推送通知。问题是,如果我按下面的方式运行应用程序,我WS(网络服务)的推送将会通过,Parse中的推送不会。

如果我注释掉GCM部分,Parse将起作用。

我还注意到,在Parse表中,当两者都启用时,在deviceToken列下,Parse会向|ID||1|添加deviceToken前缀。如果我注释掉GCM部分,Parse将不会将该前缀添加到deviceToken。我不确定这是否重要......

任何想法我做错了什么?我需要支持这两种功能,但似乎与其他东西发生冲突。有什么想法吗?

如果您需要更多源代码,请告诉我......

    <!-- ================================= GCM ================================= -->
    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        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="com.moc.sif" />
        </intent-filter>
    </receiver>

    <service
        android:name=".pushnotif.gcm.GCMListener"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>

    <service
        android:name=".pushnotif.gcm.GCMInstanceIdListener"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.gms.iid.InstanceID" />
        </intent-filter>
    </service>

    <service
        android:name=".pushnotif.gcm.GCMRegistrationIntentService"
        android:exported="false">
    </service>

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

    <receiver
        android:name=".pushnotif.parse.receivers.ParsePushReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <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>

    <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="com.moc.sif" />
        </intent-filter>
    </receiver>

2 个答案:

答案 0 :(得分:1)

这应该由Parse团队修复。在我的情况下,不幸的是其他第三个库也获得令牌,没有办法解决它。 Parse还会阻止“deviceToken”字段,因此我无法更新事件以更正它。

答案 1 :(得分:0)

好像我已经修好了。

问题在于初始化Parse,之后我调用了这个方法:

InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
String token = instanceID.getToken(getString(R.string.gcm_sender_id), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

显然使Parse覆盖了表中的deviceToken。我使用上面的token发送到我的网络服务。我要解决的问题是注释掉上面两行并使用Parse生成的deviceToken代替。因此,Parse和我的web服务都接收到从Parse库获得的相同deviceToken。现在都工作了......