2016-04-29 146 views
0

我正在通過GCM在我的項目中推送通知。我的應用程序能夠在前臺接收通知,但不能在後臺接收通知。推送通知不在後臺接收iOS

我收到一個消息的方法

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 

內當應用程序在前臺,但我沒有得到任何調用方法

func application(application: UIApplication, 
    didReceiveRemoteNotification userInfo: [NSObject : AnyObject], 
    fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void) 

當在後臺模式下應用。

我在互聯網上搜索了很長時間,才知道這是我收到的有效載荷格式的問題。我收到的有效載荷看起來像

[通知:{ 「體」: 「任何東西」, 「稱號」: 「任何標題」},優先級:高,content_available:真,至:kcF23gblKok ..., collapse_key:do_not_collapse,from:7812 ....]

任何人都可以告訴我正確的載荷格式嗎?

+0

如果在應用程序未運行時推送到達,則不執行任何代碼。查看http://stackoverflow.com/questions/11153631/increment-the-push-notification-badge-iphone – ozgur

+0

我確切的問題是,我沒有收到任何消息,當應用程序進入後臺模式。在前景模式下,所有消息都成功接收。 – SAJITH

+0

你打開了背景模式功能嗎? – mmtootmm

回答

4

使用該有效載荷

{ 
    "aps": { 
     "alert": "Hello World", 
     "sound": "default" 
     "content-available" :1 
    } 
} 

隨着內容可用啓用:

1應用程序是在前臺

顯示

申請號系統警報:didReceiveRemoteNotification:fetchCompletionHandler:被稱爲

2應用程序在後臺

系統警報顯示

應用:didReceiveRemoteNotification:fetchCompletionHandler:被稱爲

3App處於掛起

應用程序狀態更改爲背景

系統警報顯示

application:didReceiveRemoteNotification:fetchCompletionHandler:被調用

4應用程序無法運行,因爲用戶終止

系統警報顯示

沒有回調被稱爲

+0

謝謝,但仍未在背景模式下在後臺模式下收到通知 – SAJITH

+0

已選中遠程通知選項 –

+0

是的。我已經檢查過遠程通知 – SAJITH

0

在這種模式

{ 
    "to": "ID", 
    "notification": { 
     "sound": "default", 
     "title": "TITLE", 
     "body": "BODY" 
    }, 
    "priority": "high" 
} 
0

創建通知誰打交道的人與Pushy而不是GSM,當應用程序在後臺時,可能不會調用pushy的完成處理程序,因爲這樣:

即使你配置通知有效載荷與propriate鍵和值,例如:

{"to":"device***Token", "data": {"message": "Hello World!"}, "notification": {"title": "test", "body": "my message"}, "content_available": true} 

,並使用愛出風頭的控制檯發送,它發生,所有這些數據都放在愛出風頭的網站領域:「通知數據」 。因此,使用控制檯我們發現無法發送:true,對於key:「content_available」,這是在應用程序處於後臺時涉及處理程序的必要步驟。

您可以通過使用郵差例如,配置你的要求,因爲這擺脫這種:

  1. 類型:POST;
  2. raw;
  3. url:https://api.pushy.me/push?api_key=YOUR_APP_API_KEY;
  4. Content-Type:application/json;

而且在您需要發送的身體地方的東西,例如:

{"data":{"message": "Hello World!"},"tokens":["device***Token"],"content_available": true} 

有了這個,您需要將「content_available」鍵內的「APS」,而不是內部的「數據」,這將在應用程序處於後臺時調用處理程序。