为什么在应用程序处于后台时不会调用回调?

时间:2014-12-04 14:13:21

标签: javascript ios push-notification titanium apple-push-notifications

我正在开发一个钛应用程序,当推送通知进入时,需要在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发送横幅文本不是解决方案。还有其他用例。例如,当服务器需要告诉客户端有新内容要同步时,用户甚至不需要得到通知。客户端应该只在通知到达时在后台下载新内容。

2 个答案:

答案 0 :(得分:3)

您需要注册远程通知后台模式。这将唤醒您的应用程序,并在您发送通知时给您执行时间。

对于记录,这是在Appcelerator docs here

答案 1 :(得分:1)

我发现了怎么做! 当应用程序处于后台时,将调用回调 。我所要做的就是将以下内容添加到tiapp.xml中的ti:app/ios/plist/dict

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

之后,一切正常!