向 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));
);
知道我错过了什么吗?
【问题讨论】:
嗨托尼!我看到您正在为您使用Cordova
和Android
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
嗨,托尼!我看到您正在为您使用Cordova
和Android
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 设备发送通知。已发送但未收到的主要内容,如果未能解决你的问题,请参考以下文章