美文网首页iOS
iOS APP获取消息通知权限的一点小问题

iOS APP获取消息通知权限的一点小问题

作者: ZorroZuo | 来源:发表于2017-05-24 14:50 被阅读490次

    这几天用到了iOS10消息通知的一个获取消息通知权限是否打开的功能,网上相关教程很多,在此不赘述,只是我碰到了一个问题,就是当我通过[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

    if (settings.authorizationStatus == UNAuthorizationStatusDenied)

    {

    [self noNotificationPermission];

    });

    }

    }];判断没有开启的时候需要弹窗通知弹窗通知用户,但是经常会出现弹窗出现了,但是字符么有显示,但是过会又会出现,开始是怀疑是延迟加载的问题,后来想到了这个地方是用的一个block,也许设计到异步线程的问题,然后我就在block里面用gcd,把弹窗显示的代码加到主线程里面显示,结果就完美的解决了这个问题。代码如下:

    @weakify(self);

    [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

    if (settings.authorizationStatus == UNAuthorizationStatusDenied)

    {

    dispatch_async(dispatch_get_main_queue(), ^{

    @strongify(self);

    [self noNotificationPermission];

    });

    }

    }];

    这个问题提醒了我们如果以后涉及在系统的block回调里面显示UI,最好是把UI显示的代码加到主线程里面去,因为这个block很有可能就是一个异步线程,UI显示会出现各种加载问题,一般都是加载出现的时间问题,需要给碰到同样困惑的朋友有所帮助,另外贴出iOS10和iOS10以下判断系统是否打开消息通知的开关,代码如下:

    //判断是否开启了推送

    if (__IPHONE_10_0)

    {

    @weakify(self);

    [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {

    if (settings.authorizationStatus == UNAuthorizationStatusDenied)

    {

    dispatch_async(dispatch_get_main_queue(), ^{

    @strongify(self);

    [self noNotificationPermission];

    });

    }

    }];

    }

    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 10.0)

    {

    UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];

    if (UIUserNotificationTypeNone == settings.types)

    {

    [self noNotificationPermission];

    }

    }

    noNotificationPermission是自己写的一个显示弹窗的函数

    相关文章

      网友评论

        本文标题:iOS APP获取消息通知权限的一点小问题

        本文链接:https://www.haomeiwen.com/subject/ipqoxxtx.html