繁体   English   中英

Parse.com推送通知不能始终如一地接收“GCM -MISMATCH SENDER ID”错误

[英]Parse.com push notifications not consistently working receiving “GCM -MISMATCH SENDER ID” error

来自parse.com的推送通知并不一致。 随机推送通知将失败,导致GCM - MISMATCH SENDER ID“错误。我的理解是,通过编程,我们不必对GCM执行任何操作,因为parse.com将objectId发送到GCM。在任何一种情况下,我都没有能够找出有时出现此错误的任何具体原因,有时则不会。此外,我使用的是Parse版本,1.10.2。

我的Application类具有以下内容

Parse.initialize(this, APPLICATION_ID_DEBUG, CLIENT_KEY_DEBUG);
            Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
ParsePush.subscribeInBackground(Constants.CHANNEL, new SaveCallback() {
            @Override
            public void done(ParseException e) {
                if (Utils.checkIfNull(e)) {
                    // subscribed to channel
                } else {
                    // failed to subscribe to channel
                }
            }
        });

用户登录我的应用程序后,我将一个频道附加到他们。 我保存的频道数据只是我从服务器获取的用户唯一ID。

        List<String> arryChannel = new ArrayList<>();
        arryChannel.add(uniqueUserId);

        final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
        parseInstallation.put(Constants.CHANNEL, arryChannel);
        parseInstallation.saveInBackground(new SaveCallback() {
            @Override
            public void done(ParseException e) {
                if (Utils.checkIfNull(e)) {
                    // update channel with user's unique id
                } else {
                    // failed to update channel with user unique id
                }
            }
        });

最后,当用户退出时,我取消订阅他们的频道。 我添加了取消订阅以尝试阻止任何一个设备接收多个推送通知,因为他们已经以多个用户身份登录到应用程序并订阅了多个渠道。 以下是我注销时代码的外观。

                    ParsePush.unsubscribeInBackground(Constants.CHANNEL, new SaveCallback() {
                        @Override
                        public void done(ParseException e) {
                            if (Utils.checkIfNull(e)) {
                                // successfully unsubscribed to channel

                                // save the updated (unsubscribed) parse installation
                                final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
                                parseInstallation.put(Constants.CHANNEL, new ArrayList<String>());
                                parseInstallation.saveInBackground(new SaveCallback() {
                                    @Override
                                    public void done(ParseException e) {
                                        if (Utils.checkIfNull(e)) {
                                            // add whatever logs here to check for any issues with unsubscribing
                                        } else {
                                            // failed to update channel
                                        }
                                    }
                                });
                            } else {
                                Logger.e("PARSE", "failed to unsubscribed to channel: " + e.getMessage());
                            }
                        }
                    });

此实现的结果是,当推送通知不起作用时,它将继续失败大约50-100次。 然后它将开始工作约150-200次。 然后它又回到了不工作状态。 它来回不是工作,不是工作类型。 它更多的是失败,失败,失败多次,然后成功,成功,多次成功。 对我在实施中缺少的任何帮助表示赞赏。 提前致谢。

我终于找到了这个问题的答案! 这个问题与我的实施无关。 对于遇到此相同冲突的其他任何人,请查找同时使用推送通知的任何其他第三方服务。 对我来说,Mixpanel是罪魁祸首。 当我从我的代码库中删除mixpanel.initPushHandling() ,所有都开始工作了。 这是有道理的,因为当您初始化mixpanel的推送通知时,您传入一个用于GCMSenderID的值。 解析推送通知的工作方式不同。 使用parse.com,您不必发送GCMSenderID,因为parse将自动发送objectId以执行推送通知。 在这两者之间,这会导致GCM-MISMATCH-SENDER错误。

因此解决方案是,删除任何可能与parse.com冲突的服务。 并随意使用我的实现,这是好的。 干杯!

我遇到了问题,经过一番翻找,终于找到了解决方案。 正如Parse在其文档中所述,如果您使用除Parse之外的其他推送提供程序,则应提供应用程序用于推送消息的每个Sender_ID 看看下面:

Parse Android SDK选择合理的默认配置,这样您就不必担心GCM注册ID,发件人ID或API密钥。 特别是,SDK会在启动时使用Parse的发件人ID( 1076345567071 )自动注册您的应用程序,并将结果注册ID存储在应用程序当前ParseInstallation的deviceToken字段中。

但是,作为希望从多个推送提供程序发送推送的开发人员的高级功能,Parse允许您选择注册您的应用程序以推送其他GCM发件人ID。 要执行此操作,请使用以下<meta-data>标记指定其他GCM发件人ID作为<application>程序AndroidManifest.xml中<application>元素的子项:

<meta-data android:name="com.parse.push.gcm_sender_id"
           android:value="id:YOUR_SENDER_ID" />;

在上面的示例代码段中,YOUR_SENDER_ID应替换为数字GCM发件人ID。 请注意,Parse SDK希望您使用id:前缀为发件人ID添加前缀,如示例代码段所示。

如果您想使用多个其他发件人ID注册您的应用,那么上面<meta-data>元素中的android:值应该包含以逗号分隔的发件人ID列表,如下面的代码段所示:

<meta-data android:name="com.parse.push.gcm_sender_id"
           android:value="id:YOUR_SENDER_ID_1,YOUR_SENDER_ID_2,YOUR_SENDER_ID_3" />;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM