【发布时间】:2015-02-02 11:06:06
【问题描述】:
我正在开发一个钛应用程序,当推送通知进来时需要在 iOS 下显示Banner Message。因此我使用以下代码注册传入的推送通知:
var callbacks = {
types: [
Titanium.Network.NOTIFICATION_TYPE_BADGE,
Titanium.Network.NOTIFICATION_TYPE_SOUND,
Titanium.Network.NOTIFICATION_TYPE_ALERT
],
success:function(e){
console.log("success");
},
error:function(e){
console.log("error");
},
callback: function(e){
console.log("new push notification")
//code for displaying banner message would go here!
}
};
if(Ti.App.iOS.registerUserNotificationSettings){ //iOS 8 +
function onUserNotificationSettings(){
delete callbacks.types;
Ti.Network.registerForPushNotifications(callbacks);
Ti.App.iOS.removeEventListener("usernotificationsettings",onUserNotificationSettings);
}
Ti.App.iOS.addEventListener("usernotificationsettings",onUserNotificationSettings)
Ti.App.iOS.registerUserNotificationSettings(callbacks)
}else{ //up to iOS 7
Ti.Network.registerForPushNotifications(callbacks)
}
但是当应用程序在后台时,回调函数不会被调用。所以,我也不能在那里显示横幅消息,因为代码不会被执行。
应用程序在后台时未调用回调的原因可能是什么?当它在前台时,它工作得很好。正常吗?如果是,我还能将代码放在哪里来显示横幅消息?
我在装有 iOS 8.1.1 的 iPhone 5 上使用 SDK 3.4.0 版
请注意,通过 apn-payload 发送横幅文本不是解决方案。还有其他用例。例如,当服务器需要告诉客户端有新内容要同步时,用户甚至不需要收到通知。客户端应该在通知到达时在后台下载新内容。
【问题讨论】:
-
应用在后台时不会触发回调。如果你想在应用在后台时执行一些代码,你需要在iOS中运行后台服务
-
@Anand 根据this,后台服务可以在应用程序终止后运行不超过 10 分钟。那之后呢?另外,我会在后台服务中做什么?轮询所有 X 秒? ://
-
iOS 横幅将显示您通过推送通知发送的任何文本。它不是基于回调。当您发送推送通知时,它应该包含有效负载。有效载荷将显示在那里。如果您打开了应用程序,则不会显示此横幅,因此我认为在回调中您正在尝试显示由您创建的横幅。对吗?
-
@Anand 由于多种原因(语言、服务器不知道等),我不想从服务器发送应该显示给用户的消息,我也不'不想设置来自服务器的通知(徽章)数量,因为只有客户端知道他有多少未读通知。服务器服务器只是告诉客户端有新消息。此外,服务器告诉客户端他应该下载一些新内容,例如在另一个登录的客户端上更改的配置文件信息。为此,我需要调用回调。
-
为什么要投反对票?这是一个很好的问题,Titanium Docs 还没有回答。
标签: javascript ios push-notification titanium apple-push-notifications