处理推送通知有效负载数据

时间:2015-12-02 07:36:01

标签: ios swift push-notification payload

我正在搜索有关如何在通知到达客户端应用程序时立即处理推送通知有效负载数据的方式,而无需打开或点击它。除非用户点击或从通知中心打开它,否则我仍然无法获取数据或横幅或警报。函数 didReceiveRemoteNotification 仅在用户单击屏幕上的通知时触发。因此,当通知到达客户端应用程序时,如何获取通知有效负载数据,即使用户忽略(未打开)或点击它。

信息:我听说GCM(谷歌云消息传递)可以在客户端应用用户点击通知时发出通知处理程序。它可以在没有连接到客户端应用程序时立即捕获通知有效负载json数据需要用户点击或打开它。是吗?

在ios上获取通知有效负载数据时,我真的需要帮助我,甚至无需用户打开或点击它。

更新:应用程序仍然在设备上运行,这意味着它处于活动状态。当我点击我的通知时,我可以获取有效负载数据,这是#34; {aps:} json我得到它。但是,我当我没有打开通知时,仍然无法获取数据"

这是我的州

当应用程序处于前台时,我会获取数据。 1.我运行App,

2.发送通知,

3.获取通知,

4.我得到数据(有效载荷)。

当应用处于有效状态时正常工作。

但是,当应用程序达到背景时

1.运行应用程序,

2.按主页按钮

关闭应用程序

3.发送通知,

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)")
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。如前面的评论所述,this post非常有用。

According to Apple

  

当远程通知到达时,系统显示   通知用户并在后台启动应用程序(如果   需要)以便它可以调用此方法。在中启动您的应用程序   background让您有时间处理通知并下载任何通知   与之相关的数据,最大限度地减少了经过的时间   在通知到达和显示该数据之间   用户。

您要做的第一件事是允许您的应用在后台执行某些操作。您可以在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秒的挂钟时间来处理   通知并调用指定的完成处理程序块。

如果一切都清楚,请告诉我。)