我遇到了一个大问题,我在我的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)
}
非常感谢你
答案 0 :(得分:1)
当您从通知中启动应用时,您需要检查application:didFinishLaunchingWithOptions:
中的 launchOptions 以查看是否存在UIApplicationLaunchOptionsRemoteNotificationKey
。
此键的值是包含远程通知的有效负载的NSDictionary。有关处理远程通知的详细信息,请参阅application:didReceiveRemoteNotification的说明。 此密钥还用于访问名为UIApplicationDidFinishLaunchingNotification的通知的userInfo字典中的相同值。
确定启动包含通知后,使用从 launchOptions 获取的通知有效负载调用通知处理程序方法。
What you have now,application(_:didReceiveRemoteNotification:)
仅在应用已在运行时触发:
如果应用程序正在运行,应用程序会调用此方法来处理传入的远程通知。 userInfo字典包含aps键,其值是具有剩余通知的另一个字典
答案 1 :(得分:0)
您需要签入项目设置/功能-后台模式-远程通知
答案 2 :(得分:0)
在功能中启用远程通知。
答案 3 :(得分:0)
{
"aps" : {
"content-available" : 1,
"badge" : 0,
"Priority" : 10
},
"acme1" : "bar",
"acme2" : 42
}
通知的优先级:
10推送消息立即发送。
远程通知必须在设备上触发警报,声音或标志。对仅包含content-available
键的推送使用此优先级是错误的。
答案 4 :(得分:-1)
当设备运行并连接到Xcode时,系统仅将静默通知视为高优先级,这仅仅是因为操作系统足够聪明,知道“您必须调试应用程序,所以我会将您的应用程序任务视为高优先级”
当设备与Xcode断开连接时,系统会将静默通知视为低优先级。因此,不能保证它们的交付以延长电池寿命。