Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 关闭通知设置时不返回IOS 8设备令牌_Objective C_Iphone_Ios8_Apple Push Notifications_Devicetoken - Fatal编程技术网

Objective c 关闭通知设置时不返回IOS 8设备令牌

Objective c 关闭通知设置时不返回IOS 8设备令牌,objective-c,iphone,ios8,apple-push-notifications,devicetoken,Objective C,Iphone,Ios8,Apple Push Notifications,Devicetoken,我正在开发IOS推送通知,我正在尝试获取设备令牌。当操作系统通知设置打开时,我能够获取设备令牌。当它关闭时,不再调用我的didRegisterForRemoteNotificationsWithDeviceToken,因此,我无法获取设备令牌 这是我的密码 -BOOLapplication:UIApplication*应用程序完成启动时使用选项:NSDictionary*启动选项 { ifdef\uuuIphone\u8\u0 //对,这就是重点 UIUserNotificationSetti

我正在开发IOS推送通知,我正在尝试获取设备令牌。当操作系统通知设置打开时,我能够获取设备令牌。当它关闭时,不再调用我的didRegisterForRemoteNotificationsWithDeviceToken,因此,我无法获取设备令牌

这是我的密码

-BOOLapplication:UIApplication*应用程序完成启动时使用选项:NSDictionary*启动选项 { ifdef\uuuIphone\u8\u0 //对,这就是重点 UIUserNotificationSettings*设置=[UIUserNotificationSettings设置类型:UIUserNotificationTypeBadge |UIUserNotificationTypeSound |UIUserNotificationTypeAlert类别:无]; [[UIApplication sharedApplication]注册表通知设置:设置]; 其他的 //注册以接收通知 UIRemoteNotificationType myTypes=UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound; [[UIApplication sharedApplication]registerForRemoteNotificationTypes:myTypes]; 恩迪夫 返回YES; }

我还补充说

-voidapplication:UIApplication*应用程序注册器UserNotificationSettings:UIUserNotificationSettings*notificationSettings

-voidapplication:UIApplication*应用程序handleActionWithIdentifier:NSString*远程通知标识符:NSDictionary*userInfo completionHandler:void^completionHandler

但是,当关闭操作系统通知设置时

-voidapplication:UIApplication*application DidRegisterForRemotionTificationswithDeviceToken:NSData*deviceToken


将不会被调用。我已经调试了好几个小时,没有发现任何运气。

我也遇到了同样的问题

通过在项目的“功能”部分启用远程通知来解决此问题,请参见下面的屏幕截图

我对这个问题的看法是:

若用户已明确禁止您的应用程序发送通知,且应用程序已关闭远程通知,则您无法向用户发送通知。这就是为什么不需要为应用程序返回令牌的原因


如果用户已关闭通知,但您已启用远程通知,则意味着您仍有机会发送静默通知,并且iOS为您提供令牌。

您所期望的是,通知已关闭,因此您将无法获得此回调。这是设计好的。我希望我仍然能够获得令牌,因为关闭通知只是一种设置。那么,您的意思是当用户首次选择不允许时,当首次安装时从操作系统获取提示时,我们将无法获取令牌,直到用户启用该设置?如果我错了,请纠正我。谢谢@是的,如果用户在您请求推送通知访问时选择“不允许”,则会阻止您的应用程序获取推送令牌。这就是它的工作原理。@Lance,我进行了一项测试。我首先安装了一个IM应用程序,然后选择了“不允许”。我向IM发送了一条消息,没有弹出通知。然后我进入操作系统设置,启用应用程序通知。在不启动IM应用程序的情况下,我向它发送另一条消息。它可以弹出我的通知。我的问题:首先我选择不允许,所以应用服务器不应该有我的设备令牌。但是,在我在操作系统设置中启用通知设置后,如果不启动应用,它就可以弹出我的通知。因为我没有启动应用程序,所以在我启用操作系统设置后,应用程序无法发送我的令牌,不是吗?大多数情况下,设备令牌都不会改变。因此,如果您获得一个令牌,将其发送到服务器,然后像您描述的那样禁用并重新启用通知,则很可能您的旧令牌仍然有效,并且由于您启用了通知,iOS不再对通知进行静音,因此它们会显示出来。