Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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
Iphone 当用户禁用推送时,iOS应用程序应该做什么?_Iphone_Ios_Apple Push Notifications - Fatal编程技术网

Iphone 当用户禁用推送时,iOS应用程序应该做什么?

Iphone 当用户禁用推送时,iOS应用程序应该做什么?,iphone,ios,apple-push-notifications,Iphone,Ios,Apple Push Notifications,我知道可以检查用户是否已禁用推送设置,如中所述 根据上面的文章,即使用户已禁用应用程序的推送通知,也会发送推送通知。据我所知,我应该始终在ApplicationIDFinishLaunching:中注册推送通知 大多数示例如下所示,即忽略用户设置 - (void)applicationDidFinishLaunching:(UIApplication *)app { // other setup tasks here.... [[UIApplication sharedAppl

我知道可以检查用户是否已禁用推送设置,如中所述

根据上面的文章,即使用户已禁用应用程序的推送通知,也会发送推送通知。据我所知,我应该始终在
ApplicationIDFinishLaunching:
中注册推送通知

大多数示例如下所示,即忽略用户设置

- (void)applicationDidFinishLaunching:(UIApplication *)app {
    // other setup tasks here....

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

}
如果应用程序应该考虑这些设置,那么正确的实现是什么样子的

我问这个问题的原因是因为我们有很多客户抱怨他们收到推送通知,尽管他们已经禁用了推送通知。这似乎适用于iOS 6


作为开发人员,当用户禁用推送通知时,我是否应该处理这种情况?我已经一遍又一遍地阅读了文档。特别是
应用程序:didReceiveMemotentification:
的文档。它不会说明当用户禁用推送通知时是否调用它。

确保实现这些方法以了解设备是否已注册

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)_deviceToken {
        if ([application enabledRemoteNotificationTypes] < 4) {
         NSLog(@"Notifications are disabled for this application");
    return;
        }
      // The device is registered for notifications
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    NSLog(@"FAILED TO REGISTER FOR PUSH NOTIFICATIONS");
    NSLog(@"%@", error.userInfo);
}
-(void)应用程序:(UIApplication*)应用程序DIdRegisterForRemotionTificationswithDeviceToken:(NSData*)\U设备Token{
if([application enabledRemoteNotificationTypes]<4){
NSLog(@“此应用程序已禁用通知”);
返回;
}
//该设备已注册为通知
}
-(无效)应用程序:(UIApplication*)应用程序未能注册远程通知,错误为:(N错误*)错误{
NSLog(@“未能注册推送通知”);
NSLog(@“%@”,error.userInfo);
}

每次启动应用程序时都可以注册推送通知。但您必须确保实现上述方法,以了解用户是否启用或禁用了应用程序通知。

您能否更准确地了解iOS更改的性质或回答您提到的不一致性?我的理解是,应用程序注册通知(无论用户的设置如何,因为在后续通知时,用户可能已经更改了他们的设置),通知是在将来的日期生成的,用户看到通知并可能对其采取行动或不采取行动,或者用户不接受通知。我不确定这里真正的问题是什么。但是,不,注册不会失败,因为用户当前关闭了通知。我还知道,当iOS被禁用时,不会显示推送通知。但是,没有提及应用程序是否在注册后收到通知,并且用户已禁用推送通知。即使用户已禁用推送通知,始终注册是否安全?我试着相应地澄清这个问题。我在看这篇文章时,对不同iOS版本之间的差异感到困惑:。根据对其中一个答案的评论,iOS 5已经做了更改。我不明白这里的问题。每次启动应用程序时,您都会调用
registerForRemoteNotificationTypes
,然后通知将被传递,但不会显示,因此,如果暂时禁用,则会进行处理。这就是推送通知的工作原理,这就是为什么您不完全依赖推送通知来触发任何类型的更新。请您备份巡更声明并参考文档,好吗?当用户禁用推送通知时,不清楚应用程序是否获得回调。我已经阅读了
应用程序:didReceivereMotentification:
的文档,但找不到任何相关信息。与point put一样,当用户禁用推送通知时,操作系统不会显示推送通知。你明白我的意思吗?这听起来像是我在寻找的答案。如果你在if语句中解释神奇的“4”,那就更好了。我将把它添加到我的代码中。以下是有关UIApplication的enabledRemoteNotificationTypes的更多信息,如果值>=4,则说明其已启用。更多说明:由于enabledRemoteNotificationTypes返回值是按位typedef enum,我对启用UIRemoteNotificationTypeAlert感兴趣。所以我在查4。如果您对其他警报感兴趣,比如徽章和声音,那么您可以分别检查这些警报。您是否找到任何说明必须实施此方法的文档?@johankarsson这不是“必须”的。如果不实现这些方法,您将不知道用户是否启用或禁用了推送通知