向 Android 设备发送通知。已发送但未收到

Posted

技术标签:

【中文标题】向 Android 设备发送通知。已发送但未收到【英文标题】:Sending notification to Android device. Sent but not received 【发布时间】:2016-02-11 18:50:01 【问题描述】:

我正在熟悉向设备发送通知,

我目前正在尝试使用 pubnub 和 Google 云消息向我的设备发送通知:

(function() 
    var pubnub = PUBNUB.init(
        subscribe_key: 'my-subscribe',
        publish_key:   'my-publish',
    );

    var os = 'android';
    var regid = '';
    var channel = 'mi-canal';
    
    function sendPush() 
        var gwtype = (os === 'ios') ? 'apns' : 'gcm';
        console.log('sending push notification...',channel,gwtype);

        pubnub.mobile_gw_provision(
            device_id: 'APA91bE0rX8mfzY0VttACffUPIagSbd5No0xxxxxxxxxxxxxxxxxEHCVFBbzPqPHKG9phyQ31O4W6aEgMUqWANtWrK-zdMsiONUwAbUW4efso8ScemlXGM8tJq0M12oR0E2Kk9',
            channel: channel, 
            op: 'add', 
            gw_type: gwtype,
            error: function(msg)console.log(msg);,
            callback: function() 
                var message = PNmessage();

                message.pubnub = pubnub;
                message.callback = function (msg) console.log(msg); ;
                message.error = function (msg) console.log(msg); ;
                message.channel = channel;
                message.apns = 
                    alert: 'The room temperature is set too high'
                ;
                message.gcm = 
                    title: 'PubNub Push Demo',
                    message: 'The room temperature is set too high'
                ;

                message.publish();
                        
        );

    
    sendPush();
)();

哪些日志:

[1, "Sent", "14471821928645156"]

问题是我没有在设备中收到通知,以及 Android 应用程序(cordova 制作)

var pushNotification = window.plugins.pushNotification;
            
            
            //pushNotification.unregister(successHandler, errorHandler);
            pushNotification.register(
                successHandler, 
                errorHandler, 
                
                    'senderID':'api-project-xxxxxxxx',
                    'ecb':'onNotificationGCM' // callback function
                
            );  
            pusNotification.subscribe(
                channel: 'mi-canal',
                message: function(m)
                    alert('Conslog: '+m);
                ,
            error: function (error) 
              // Handle error here
              console.log(JSON.stringify(error));
            
            );

知道我错过了什么吗?

【问题讨论】:

嗨托尼!我看到您正在为您使用CordovaAndroid html5 应用程序。您需要等待 PubNub 网络系统分配和配置设备 GCM,我认为这可能是问题所在。 【参考方案1】:

我个人在我的 Android 应用上使用OneSignal,它就像一个魅力。 您可以阅读文档here。它是 100% 免费的,并且还使用 Google 的云消息服务。基本上在安装他们的 SDK 并遵循整个文档之后,您的代码将是这样的。

代码示例:

document.addEventListener('deviceready', function () 
  // Enable to debug issues.
  // window.plugins.OneSignal.setLogLevel(logLevel: 4, visualLevel: 4);
  
  var notificationOpenedCallback = function(jsonData) 
    console.log('didReceiveRemoteNotificationCallBack: ' + JSON.stringify(jsonData));
  ;

  window.plugins.OneSignal.init("b2f7f966-d8cc-11e4-bed1-df8f05be55ba",
                                 googleProjectNumber: "703322744261",
                                 notificationOpenedCallback);
  
  // Show an alert box if a notification comes in when the user is in your app.
  window.plugins.OneSignal.enableInAppAlertNotification(true);
, false);
将“b2f7f966-d8cc-11e4-bed1-df8f05be55ba”替换为您的 OneSignal 应用 ID。 将“703322744261”替换为您的 Google 项目编号。

对我来说,一旦我发送通知,我的手机会在 3 秒内发出哔哔声。希望这会有所帮助:)

【讨论】:

有趣的是我有多快让它在安卓上运行!问题是我不知道如何定位用户..? 您希望仅针对特定用户接收通知吗?还是您希望所有用户都收到通知? 我想在注册时获取用户/设备ID,所以我只能将与他相关的内容发送给他.. onesignal 网站的消息栏内有一个名为 A/B 测试的选项。我不知道它是否会起作用,但我想您可以使用 cordova-plugin-device 来获取用户的设备模型等。然后在 A/B 测试选项中添加模型。请告诉我它是否有效:p 我的意思是识别用户并只向他发送通知,有点像documentation.onesignal.com/docs/…【参考方案2】:

Android 上的 PubNub Cordova HTML5

Sending Android Push Notifications via GCM in javascript

嗨,托尼!我看到您正在为您使用CordovaAndroid HTML5 应用程序。您需要等待 PubNub 网络系统为 GCM 分配和配置设备。我认为这可能是问题所在。只需在发送 GCM 有效负载之前添加延迟。此外,我还为您添加了一个链接,该链接指向今天的最佳指南,了解如何使用 Cordova / PhoneGap 在 Android 上使用 GCM 推送通知

Cordova GCM 推送通知

您可能想知道是否可以在不设置您自己的服务器的情况下从用 JavaScript 编写的网络应用发送 Android 推送通知。好吧,当您将 PubNub Push API 与 PhoneGap 结合使用时,绝对是这样!


调试推送通知

您可以使用频道的-pndebug 频道进行一些高级调试,并检查设备是否仍注册到频道。

pndebug 频道

    使用PubNub Dev Console 订阅频道的-pndebug 频道。如果您要发布到的频道是foo,则订阅foo-pndebug。确保使用正确的发布/订阅键。

    在顶层将'pn_debug':true 添加到您的消息负载并发布该消息。

    "pn_gcm": 
        "data": 
            "message": "hello"
        ,
    
    "pn_apns": 
        "aps": 
            "alert": "hello"
        ,
    
    "pn_debug": true
    

    将消息发布到频道foo。如果推送消息注册有任何问题,您应该在订阅foo-pndebug 的开发控制台中看到有用的错误消息。

检查频道注册

您还可以在浏览器中使用简单的 REST URL 发布推送通知后,查看设备是否仍注册到频道。

http://pubsub.pubnub.com/v1/push/sub-key/<your-sub-key>/devices/<device-reg-token>?type=gcm

这将返回设备仍为推送通知注册的所有通道(在本例中为 GCM。根据需要将 type 查询参数更改为 apns)。

返回:["demo", "demo1", "demo2"]

如果您刚刚向其发送推送通知的频道不在该列表中,则可能存在设备注册令牌问题(例如,令牌无效或设备未注册)。但是-pndebug 频道应该向您透露这一点。

【讨论】:

感谢您的宝贵时间!看来我毕竟没有使用 pubnub.. 谢谢!

以上是关于向 Android 设备发送通知。已发送但未收到的主要内容,如果未能解决你的问题,请参考以下文章

推送示例android gcm,已注册设备但未收到推送通知

通过cURL / PHP发送时,设备上未收到Firebase通知

Android GCM 不向设备发送通知消息

Google FCM 服务器:200 但未向手机发送通知

如何向 ios 应用程序发送 Firebase 推送通知

Android:推送机器人向某些注册设备组发送通知