安卓 - Azure 推送通知 Google FCM

6
我已经按照 使用Azure通知中心向Android发送推送通知教程 的指导,使用Azure Notification Hub将推送通知功能添加到了我的Android应用程序中。
之前,我曾尝试使用另一个教程,使用Azure Notification Hub的Google云消息传递服务,但是只有当我从Android Studio将应用程序发送到我的设备时,才能收到推送通知。但是,当我构建签名APK并在设备上安装它时,没有推送通知传递。
昨天一整天我都在尝试解决这个问题(禁用ProGuard,尝试不同的API密钥等),今天早上我决定重新开始。那时,我意识到当用户从Cloud Console中单击GCM时,Google现在会将用户引导至Firebase Cloud Messaging。所以,我使用上述教程和Google FCM将推送通知功能添加到了我的应用程序中。
它非常好用...但是,当我创建签名APK并安装它时,而不是从Android Studio将应用程序发送到我的设备时,我无法收到推送通知。Azure显示推送已成功发送,但没有任何传递。
在我的推送处理程序中,我有一个日志记录到控制台,如下所示的onReceive方法。当我从Android Studio运行应用程序时,这个方法被很好地调用,并且推送按预期进行。但是,当我创建签名apk并从中运行时,onReceive方法不会被调用,也没有推送进来。
@Override
    public void onReceive(Context context, Bundle bundle) {

        Log.d("TAG","TRIGGERED");

        ctx = context;
        String nhMessage = bundle.getString("message");
        String nhTitle = bundle.containsKey("title") ? bundle.getString("title") : "Title";
        String nhBadge = bundle.containsKey("badge") ? bundle.getString("badge") : null ;
        sendNotification(nhMessage,nhTitle,nhBadge);
        if (Main.isVisible) { Main.mainActivity.ToastNotify(nhMessage); }
    }

有人可以帮助我吗?我错过了什么吗?难道是因为我直接安装了APK?必须从Google Play下载吗?除此之外,我不知道还可能是什么原因。

更新

根据Nikita G的建议,我按照使用cURL从命令行发送测试推送的说明进行操作。
我收到的响应如下(看起来像是成功消息),但是我的设备上没有收到推送通知。

{"multicast_id":6722521883082447284,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1473693614087201%06fb35f0f9fd7ecd"}]}

我的cURL请求看起来像这样,就像教程展示的一样。
curl --header "Authorization: key=XXXXXXXXXXXX" --header "Content-Type: application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"fs...Tw:APA...SzXha\"]}"

更新

我刚刚注意到,不仅在使用已签名的APK时会出现此问题。在Android Studio中,如果我使用“生成APK”选项生成APK文件,也会出现此问题。

enter image description here

然后使用位于myappfolder/app/build/output/apk/的app-debug.apk文件安装,但推送通知仍然无法正常工作。只有通过Android Studio中的Run选项向设备发送时才能正常工作。


你使用的是哪个设备? - Diego Giorgini
@NikitaG 我已经完成了教程并且一切都设置正确。注册也能正常工作,但是只有签名APK没有推送。 - Phil
@Phil,我对Notification Hubs比Android/FCM更了解,所以很遗憾我无法提供太多帮助,因为我们已经把问题缩小到与Azure之外的某些事物有关。我建议你在相应的Google小组上发帖(并附上这个问题的链接,以提供你目前所学到的一切)。他们的开发人员会积极监控官方论坛,并希望能够帮助你解决问题。 - Nikita R.
@NikitaG - 没有人比你提供的帮助更多了。我想在这个问题上奖励给你,但是为了这样做,我需要你发布一些答案。 - Phil
@Phil,在评论区中发布了我们谈话的总结。很高兴你最终能够解决问题。你是自己试着找到解决方法还是在其他地方发布了问题? - Nikita R.
显示剩余9条评论
2个回答

3
经过几天的尝试,发现我的MyHandler类没有声明为public,而这个类负责处理推送信息。将该类更改为public后,构建和签名apk时可以正常推送了。
但我想知道,为什么只有从apk文件安装应用程序时才会出现问题,这一点让我感到困惑。

1
我也有过同样的经历,但我不明白一个简单的限定符怎么会引发这个问题!! - Samuele Furnari

1

在这种情况下,首先要遵循的重要方法是尝试了解问题是在通知中心方面还是消息推送服务(在本例中为 FCM)方面。

一种方法是首先查阅 ANH 诊断指南。如果问题仍未得到解决,可以尝试直接通过 PNS 推送消息以查看是否有效。(在 FCM 的情况下,您可以 从命令行发送测试推送。)


1
感谢你们帮我解决这个问题。原来我在我的推送处理程序类上缺少了“public”修饰符,但如果没有你们帮助排除其他可能性,我永远不会发现它。 - Phil
很高兴你已经解决了它。这些事情在你已经解决它们时似乎很简单,但找起来却极其困难。干得好! - Nikita R.

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