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

Ios 推送通知仅在使用Xcode启动应用程序时有效,ios,swift,xcode,firebase,push,Ios,Swift,Xcode,Firebase,Push,我有一个大问题,我在iOS项目上设置推送通知(非常困难)。我决定在“AppDelegate”的“DidReceiveMemotentification”方法中接收通知的数据,然后以编程方式创建它(以便执行强制个人处理)。一切都很完美,只有当我在没有Xcode帮助的情况下启动应用程序时,我不再收到通知,通知创建代码也不会执行。我不知道该怎么办 func application(_ application: UIApplication, didReceiveRemoteNotification u

我有一个大问题,我在iOS项目上设置推送通知(非常困难)。我决定在“AppDelegate”的“DidReceiveMemotentification”方法中接收通知的数据,然后以编程方式创建它(以便执行强制个人处理)。一切都很完美,只有当我在没有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)
}

非常感谢您

当您从通知启动应用程序时,您需要检查
应用程序中的启动选项:did使用选项完成启动:
以查看
uiapplicationaunchoptionsremotenotificationkey
是否存在

根据报告:

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

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

,即
应用程序(uu:didReceiveMemotentification:)
仅在应用程序已在运行时触发:

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


您需要检查您的项目设置/功能-后台模式-远程通知当设备运行并连接到Xcode时,系统将静默通知视为高优先级,因为操作系统足够智能,可以知道“您必须调试您的应用程序,因此我将把您的应用程序任务视为高优先级”


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

在功能中启用远程通知

 {
   "aps" : {
      "content-available" : 1,
        "badge" : 0,
        "Priority" : 10
   },
   "acme1" : "bar",
   "acme2" : 42
}
通知的优先权:

10推送消息立即发送

远程通知必须触发设备上的警报、声音或徽章。将此优先级用于仅包含可用内容的推送是错误的


如果您的测试设备安装了iOS11,则此问题与现有的Apple bug有关。您是否使用iOS11进行测试?另请参阅我使用的是最新的ios 11.0.3是,比当前的ios 11(包括11.0.1、11.0.2和11.0.3)-该问题将通过ios 11.1解决,应在本周或下周交付。我的可能副本将等待。。。