gpt4 book ai didi

ios - 后台推送适用于 iOS7 但不适用于 iOS8

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:42 25 4
gpt4 key购买 nike

我有一个使用后台推送的应用程序,当该应用程序在装有 iOS 7 的设备上运行时一切正常,但如果它在后台运行且在设备上运行,则推送不会传送到该应用程序使用 iOS 8。

我有这个作为注册码:

- (void) registerForRemoteNotification
{
// Check for the presense of iOS8 notification API
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)])
{
NSLog(@"iOS8 detected");
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
// iOS version < 8
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}
}

我也试过这个变体:

- (void) registerForRemoteNotification
{
// Check for the presense of iOS8 notification API
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)])
{
NSLog(@"iOS8 detected");
[[UIApplication sharedApplication] registerForRemoteNotifications];
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
}
else
{
// iOS version < 8
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}
}

这是推送负载的内容:

aps =     {
"content-available" = 1;
somePayload = "The payload";
sound = "";
};

这是正在发生的事情:

1) On iOS7 when app is in the foreground -> push is delivered to the app as expected
2) On iOS7 when app is in the background -> push is delivered to the app as expected
3) On iOS8 when app is in the foreground -> push is delivered to the app as expected
4) On iOS8 when app is in the background -> push is NOT delivered to the app
5) On iOS8 when app is in the foreground and running via Xcode -> push is delivered to the app as expected
6) On iOS8 when app is in the background and running via Xcode -> push is delivered to the app as expected

(在每种情况下 didRegisterForRemoteNotificationsWithDeviceToken: 都会被调用而 didFailToRegisterForRemoteNotificationsWithError: 不会。)

我不知道它是否相关,但看看 4) 和 6) 之间的区别,我看到了应用程序是否通过 Xcode 运行之间的区别。

我的问题是,对于第 4 种情况,为什么推送没有传送到应用程序)? 它适用于 iOS7,并且 AFAICT 在 iOS8 上运行时注册远程通知的代码是正确的(事实上,如果通过 Xcode 执行应用程序它确实有效,因此它必须是正确的),因此为什么当应用程序运行时它不起作用在 iOS8 上独立于 Xcode 运行?

** 更新。发布赏金后,我浏览了 Apple 开发者论坛。似乎很多人都有类似的问题。对于某些 wifi 必须启用才能获得后台推送,但对我来说这不起作用 - 我必须为手机充电才能获得它们。如果它没有充电(即使电池已充满),那么它们就不会交付。 Apple 表示他们在 iOS 8 的后台推送方面所做的是故意的,而不是错误,但我的结论是他们要么搞砸了,要么做了一些不合逻辑的事情,以至于被认为是搞砸了。所以我希望他们会意识到他们所做的事情一团糟,并在未来的版本中进行更改。

如果您想了解背景,请前往相关的开发论坛并阅读一些相关主题。

最佳答案

我认为您需要设置推送通知授权 key 。

aps环境 ,在 iOS 中接收推送通知

请引用此链接 Push Notification Entitlement Keys

关于ios - 后台推送适用于 iOS7 但不适用于 iOS8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com