-1

我正在開發一個需要顯示的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) 
} 

但回調函數不當應用程序在後臺時會被調用。所以,我也不能在那裏顯示橫幅信息,因爲代碼不會被執行。

當應用程序在後臺時回調沒有被調用的原因是什麼?當它在前景中時,它完美地工作。這是正常的嗎?如果是的話,我還會在哪裏放置我的代碼來顯示橫幅信息?

我使用的SDK版本3.4.0上的iPhone 5與iOS 8.1.1

請注意,通過APN-有效載荷中發送標題文本也不是個辦法。還有其他用途。例如,當服務器需要告訴客戶端有新的內容需要同步時,用戶甚至不需要得到通知。客戶只需在通知到達時在後臺下載新內容。

+0

如果應用程序在後臺,則不會觸發回調。如果您想在應用程序處於後臺時執行某些代碼,則需要根據[this](http://docs.appcelerator.com/titanium/3.0/#!/api/)在iOS – Anand 2014-12-04 17:06:39

+0

@Anand中運行後臺服務Titanium.App.iOS.BackgroundService)後臺服務可以在應用程序終止後不超過10分鐘運行。那之後呢?另外,我會在後臺服務中做什麼?輪詢所有X秒? :/ – 2014-12-04 17:11:28

+0

iOS橫幅將顯示通過推送通知發送的任何文本。它不基於回調。當你發送推送通知時,它應該包含一個有效載荷。有效載荷將顯示在那裏。如果您打開了您的應用程序,則此橫幅不會顯示,因此我認爲在回調中您嘗試顯示由您創建的橫幅。對? – Anand 2014-12-05 10:18:44

回答

1

我已經找到了如何做到這一點! 回調將在應用程序處於後臺時調用。我不得不這樣做是以下添加到我的tiapp.xml在​​:

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

在那之後,一切工作正常!

+0

這就是我在回答中告訴你的。你爲什麼又回答並接受你的? – 2014-12-12 14:43:43

+0

@Mike Gottlieb你已經改變了你的答案。它沒有告訴正確的答案。如果你願意,你可以得到賞金,否則會被浪費;) – 2014-12-12 14:45:36

+0

謝謝!我很高興現在事情正在爲你工作。 – 2014-12-12 20:35:49

3

您需要註冊遠程通知後臺模式。這會喚醒您的應用程序,並在發送通知時爲您提供執行時間。

根據記錄,這是在Appcelerator的文檔here

+0

我試着聽這個事件。但它也只是在將我的答案中的代碼添加到tiapp.xml後才被調用。 – 2014-12-12 09:55:09

+0

現在這個答案也是正確的。我會一直接受我的回答,因爲它直接提供瞭解決方案,而在你的回答中,我將不得不訪問鏈接並自己閱讀。 – 2014-12-12 14:47:26

相關問題