推送通知仅在使用Xcode启动应用时有效

时间:2017-10-26 14:43:03

标签: ios swift xcode firebase push

我遇到了一个大问题,我在我的iOS项目上设置(非常困难)推送通知。我决定在“AppDelegate”的“didReceiveRemoteNotification”方法中接收通知的数据,然后以编程方式创建它(以便执行强制性的个人处理)。一切都很完美,只有当我在没有Xcode帮助的情况下启动我的应用程序时,我才会收到通知,不会执行通知创建代码。我不知道该怎么做......

func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping 
(UIBackgroundFetchResult) -> Void) {

    let body = userInfo["body"]

    print(userInfo)

    if #available(iOS 10.0, *) {
        let content = UNMutableNotificationContent()
        content.body = body! as! String
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 
1, repeats: false)

        let request = UNNotificationRequest(identifier: "idt", content: 
content, trigger: trigger)
        UNUserNotificationCenter.current().add(request, 
withCompletionHandler: nil)

    } else {
        // Fallback on earlier versions
    }

    completionHandler(UIBackgroundFetchResult.newData)
}

非常感谢你

5 个答案:

答案 0 :(得分:1)

当您从通知中启动应用时,您需要检查application:didFinishLaunchingWithOptions:中的 launchOptions 以查看是否存在UIApplicationLaunchOptionsRemoteNotificationKey

根据Documentation

  

此键的值是包含远程通知的有效负载的NSDictionary。有关处理远程通知的详细信息,请参阅application:didReceiveRemoteNotification的说明。   此密钥还用于访问名为UIApplicationDidFinishLaunchingNotification的通知的userInfo字典中的相同值。

确定启动包含通知后,使用从 launchOptions 获取的通知有效负载调用通知处理程序方法。

What you have nowapplication(_:didReceiveRemoteNotification:)仅在应用已在运行时触发:

  

如果应用程序正在运行,应用程序会调用此方法来处理传入的远程通知。 userInfo字典包含aps键,其值是具有剩余通知的另一个字典

答案 1 :(得分:0)

您需要签入项目设置/功能-后台模式-远程通知

答案 2 :(得分:0)

在功能中启用远程通知。

答案 3 :(得分:0)

 {
   "aps" : {
      "content-available" : 1,
        "badge" : 0,
        "Priority" : 10
   },
   "acme1" : "bar",
   "acme2" : 42
}

通知的优先级:

10推送消息立即发送。

远程通知必须在设备上触发警报,声音或标志。对仅包含content-available键的推送使用此优先级是错误的。

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html#//apple_ref/doc/uid/TP40008194-CH13-SW1

答案 4 :(得分:-1)

当设备运行并连接到Xcode时,系统仅将静默通知视为高优先级,这仅仅是因为操作系统足够聪明,知道“您必须调试应用程序,所以我会将您的应用程序任务视为高优先级”

当设备与Xcode断开连接时,系统会将静默通知视为低优先级。因此,不能保证它们的交付以延长电池寿命。