2015-12-02 85 views
3

我正在尋找如何處理推送通知有效負載數據的方式,只要通知到達客戶端應用程序而不打開或點擊它。而且我仍然不會獲取數據,除非用戶點擊或只有當用戶點擊屏幕上的通知時纔會觸發功能didReceiveRemoteNotification。所以,當通知到達客戶端應用程序時,如何獲取通知有效載荷數據,即使用戶忽略(沒有打開或點擊)它。處理推送通知有效負載數據

信息:我聽說GCM(Google Cloud Messaging)可以在客戶端應用程序用戶點擊通知或不通知的情況下生成通知處理程序。它可以在不需要時即刻捕獲通知有效載荷json數據用戶點擊或打開它。是嗎?

我真的需要一個人來接我,通知ios的有效載荷數據,甚至不需要用戶打開或點擊它。

更新:該應用程序仍在設備上運行,這意味着它是active.I可以得到有效載荷數據,當我點擊我的通知是「{APS:} JSON我得到它。但是,我仍然無法得到當我不打開通知」

數據這是我的狀態

當應用程序在前臺,我得到的數據。 1.I運行應用程序,

2.發送通知,

3.Get與警報通知,

4,我得到的數據(有效載荷)。

當應用程序處於活動狀態時正常工作。

但是,當應用程序達到背景

1.Run的應用程序,

2.Close應用程序按home鍵,

3.Send通知,

4 。獲取通知。

5.但是,無法獲取數據,直到我點擊通知我在橫幅 或通知中心收到通知。

但是,當我點擊通知橫幅或通知它去應用程序,然後我得到的數據。

是否有無論如何,我可以得到的數據,如果應用程序在後臺收到通知時。

下面是代碼:

import UIKit 
import RealmSwift 

let realm = try! Realm() 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 
var data : [NSObject : AnyObject]! 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    //one singnal is the push notification service that i use for push notification. 
    let oneSignal = OneSignal(launchOptions: launchOptions, appId: "__app_id__") { (message, additionalData, isActive) in 
     NSLog("OneSignal Notification opened:\nMessage: %@", message) 

     if additionalData != nil { 
      NSLog("additionalData: %@", additionalData) 
     } 
    } 
    oneSignal.enableInAppAlertNotification(true) 
    return true 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    print("User Info : \(userInfo)") 
    if let custom = userInfo["custom"] as? NSDictionary{ 
     if let a = custom["a"] as? NSDictionary{ 
      print("A : \(a)") 
     } 
    } 
} 
+0

就得到這種方法didReceiveRemoteNotification通知數據? –

+0

@Maulik當用戶點擊(打開)它,是的...我得到有效載荷(json)數據。 –

+0

我認爲你不打開通知屏幕時,應用程序關閉我的權利 ? –

回答

1

我碰到了同樣的問題來了。正如前面的評論所述,this post非常有幫助。

According to Apple

當遠程通知到達時,系統將顯示 通知給用戶,並在背景中啓動應用程序(如果需要的話 ),以便它可以調用此方法。在 背景中啓動您的應用程序可爲您提供處理通知的時間,並下載與其關聯的任何 數據,從而最大限度地減少通知到達之間經過的時間量,並將該數據顯示給用戶 。

您需要做的第一件事就是讓您的應用程序在後臺執行某些操作。您可以在info.plist中添加Required background mode,然後將其添加到App downloads content in response to push notifications。您的info.plist應該是這個樣子:

info.plist Required background modes

現在這樣做,當它收到一個通知你的應用程序應該清醒。您可以在didReceiveRemoteNotification內執行一個小代碼。如此。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
//do some code here 
UIBackgroundFetchResult.NewData 
} 

注意,你必須要注意completionHandler:

只要處理完的通知,則必須調用 塊的處理器參數或您的應用程序將被終止。您的 應用程序有多達30秒的掛鐘時間來處理 通知並調用指定的完成處理程序塊。

讓我知道,如果一切都清楚了:)