正在向 Android 台设备发送通知。已发送但未收到
Sending notification to Android device. Sent but not received
我越来越熟悉向设备发送通知,
我目前正在尝试使用 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));
}
});
知道我错过了什么吗?
PubNub Cordova HTML5 Android
嗨托尼!我看到您正在为 HTML5
应用程序使用 Cordova
和 Android
。您需要等待 PubNub 网络系统为 GCM 分配和配置设备。我认为这可能是问题所在。只需在发送 GCM 负载之前添加延迟。此外,我还向您添加了 link 今天关于使用 Cordova / PhoneGap.
在 Android 上开始使用 GCM 推送通知的最佳指南
Cordova GCM 推送通知
您可能想知道是否可以在不设置自己的服务器的情况下从用 JavaScript 编写的网络应用程序发送 Android 推送通知。好吧,当您将 PubNub Push API 与 PhoneGap 结合使用时,绝对是这样!
调试推送通知
您可以使用频道的 -pndebug
频道进行一些高级调试,并检查设备是否仍在频道中注册。
pndebug 频道
使用PubNub Dev Console订阅频道的-pndebug
频道。如果您要发布的频道是 foo
,则订阅 foo-pndebug
。确保使用正确的 pub/sub 键。
将 'pn_debug':true
添加到顶层的消息负载并发布该消息。
"pn_gcm": {
"data": {
"message": "hello"
},
}
"pn_apns": {
"aps": {
"alert": "hello"
},
}
"pn_debug": true
将消息发布到频道 foo
。如果推送消息注册有任何问题,您应该会在订阅 foo-pndebug
的 Dev Console 中看到有用的错误消息。
检查频道注册
您还可以在浏览器中使用简单的 REST URL 发布推送通知后检查设备是否仍注册到频道。
http://pubsub.pubnub.com/v1/push/sub-key/<your-sub-key>/devices/<device-reg-token>?type=gcm
这将 return 设备仍注册用于推送通知的所有频道(在本例中为 GCM。根据需要将 type
查询参数更改为 apns
)。
Returns: ["demo", "demo1", "demo2"]
如果您刚刚向其发送推送通知的频道不在该列表中,则可能存在设备注册令牌问题(例如无效令牌或设备未注册)。但是 -pndebug
频道应该会向您揭示这一点。
我个人在我的 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);
- Replace "b2f7f966-d8cc-11e4-bed1-df8f05be55ba" with your OneSignal App Id.
- Replace "703322744261" with your Google Project Number.
对我来说,只要我发送通知,我的 phone 就会在整整 3 秒后收到提示音。希望这有帮助:)
我越来越熟悉向设备发送通知,
我目前正在尝试使用 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));
}
});
知道我错过了什么吗?
PubNub Cordova HTML5 Android
嗨托尼!我看到您正在为 HTML5
应用程序使用 Cordova
和 Android
。您需要等待 PubNub 网络系统为 GCM 分配和配置设备。我认为这可能是问题所在。只需在发送 GCM 负载之前添加延迟。此外,我还向您添加了 link 今天关于使用 Cordova / PhoneGap.
Cordova GCM 推送通知
您可能想知道是否可以在不设置自己的服务器的情况下从用 JavaScript 编写的网络应用程序发送 Android 推送通知。好吧,当您将 PubNub Push API 与 PhoneGap 结合使用时,绝对是这样!
调试推送通知
您可以使用频道的 -pndebug
频道进行一些高级调试,并检查设备是否仍在频道中注册。
pndebug 频道
使用PubNub Dev Console订阅频道的
-pndebug
频道。如果您要发布的频道是foo
,则订阅foo-pndebug
。确保使用正确的 pub/sub 键。将
'pn_debug':true
添加到顶层的消息负载并发布该消息。"pn_gcm": { "data": { "message": "hello" }, } "pn_apns": { "aps": { "alert": "hello" }, } "pn_debug": true
将消息发布到频道
foo
。如果推送消息注册有任何问题,您应该会在订阅foo-pndebug
的 Dev Console 中看到有用的错误消息。
检查频道注册
您还可以在浏览器中使用简单的 REST URL 发布推送通知后检查设备是否仍注册到频道。
http://pubsub.pubnub.com/v1/push/sub-key/<your-sub-key>/devices/<device-reg-token>?type=gcm
这将 return 设备仍注册用于推送通知的所有频道(在本例中为 GCM。根据需要将 type
查询参数更改为 apns
)。
Returns: ["demo", "demo1", "demo2"]
如果您刚刚向其发送推送通知的频道不在该列表中,则可能存在设备注册令牌问题(例如无效令牌或设备未注册)。但是 -pndebug
频道应该会向您揭示这一点。
我个人在我的 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);
- Replace "b2f7f966-d8cc-11e4-bed1-df8f05be55ba" with your OneSignal App Id.
- Replace "703322744261" with your Google Project Number.
对我来说,只要我发送通知,我的 phone 就会在整整 3 秒后收到提示音。希望这有帮助:)