美文网首页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