【发布时间】:2014-10-24 12:33:41
【问题描述】:
我正在开发 IOS 推送通知,并试图获取设备令牌。打开操作系统通知设置时,我能够获取设备令牌。当它关闭时,我的didRegisterForRemoteNotificationsWithDeviceToken 不再被调用,因此我无法获取设备令牌。
这是我的代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef __IPHONE_8_0
//Right, that is the point
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge
|UIUserNotificationTypeSound
|UIUserNotificationTypeAlert) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
#else
//register to receive notifications
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
#endif
return YES;
}
我也添加了
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
但是,当关闭操作系统通知设置时,
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
不会被调用。我已经调试了很多小时,但没有运气。
【问题讨论】:
-
您期望什么,通知已关闭,因此您不会收到此回调。这是按设计工作的。
-
我确实希望我仍然能够获得令牌,因为关闭通知只是一个设置。那么你的意思是当用户在第一次安装时从操作系统得到提示时第一次选择“不允许”时,我们将无法获得令牌,直到用户启用设置?如果我错了,请纠正我。谢谢。 @兰斯
-
是的,如果用户在您请求推送通知访问时选择“不允许”,它将阻止您的应用程序获取推送令牌。这就是它应该如何工作的方式。
-
@Lance,我进行了测试。我首先安装了一个 IM 应用程序,我首先选择“不允许”。我向 IM 发送消息,没有弹出通知。然后我走了到操作系统设置,启用应用程序通知。不启动 IM 应用程序,我向它发送另一条消息。它能够弹出我的通知。我的问题:起初我选择“不允许”,所以应用程序服务器不应该有我的设备令牌。但是,在我在操作系统设置中启用通知设置后,没有启动应用程序,它能够弹出我的通知。由于我不启动应用程序,因此在我在操作系统设置中启用后,应用程序无法发送我的令牌不是吗?
-
大多数情况下,设备令牌永远不会改变。因此,如果您有一个令牌,将其发送到您的服务器,然后像您描述的那样禁用然后重新启用通知,那么您的旧令牌很可能仍然有效,并且由于您启用了通知,iOS 不再静音通知所以他们出现了。
标签: objective-c iphone ios8 apple-push-notifications devicetoken