iOS客户端是否接收推送的设置

来源:互联网 发布:php和python java 编辑:程序博客网 时间:2024/06/07 06:51

ios中的推送相信大家都不陌生,现在没有推送的app已经很少见了。正是因为有这种需求,故而出现了一系列的三方推送SDK,包括JPush,个推。。。等等。现在来简单谈谈设置中的是否接收推送怎么做。
如何集成极光推送、如何处理收到通知时的页面跳转问题就不细说了,在网上已经有很多人写了相关内容,不清楚的可以参考这篇文章 http://www.jianshu.com/p/f75ba85a4414 ,里面写的比较详细。
一般我们的是否接收推送都是一个UISwitch控制,在系统允许此app接收通知的条件下,switch打开即是接收通知,否则不接收。那么如何判断系统允许接收本app通知即在首次进入app时用户选择了接收推送呢?很简单,看下面代码:

//判断系统是否接收推送- (BOOL)isAllowedNotification{    //ios8及以上    UIUserNotificationSettings*settings=[UIApplication sharedApplication].currentUserNotificationSettings;    if (settings.types != UIUserNotificationTypeNone) {            return YES;    }else            return NO;}

接下来,就是在创建UISwitch的地方,根据系统是否接收通知,打开或关闭switch

if([self isAllowedNotification]){     pushSwith.on = YES;}else{     pushSwith.on = NO;}

同时,如果用户要主动控制是否接收推送,就需要添加switch的target-action:

[pushSwith addTarget:self action:@selector(swithOnOrOff) forControlEvents:UIControlEventValueChanged];
//根据NSUserDefaults中存储的switch状态决定switch的打开or关闭(**下文会讲到**)NSString *state = [[NSUserDefaults standardUserDefaults] valueForKey:@"push"];if (state != nil) {    if ([state isEqualToString:@"on"]) {            pushSwith.on = YES;    }else if ([state isEqualToString:@"off"])    {            pushSwith.on = NO;    }}
//是否开启推送通知- (void)swithOnOrOff{    if (self.pushSwith.on) {        if (![self isAllowedNotification]) {//            NSLog(@"请到系统设置中打开通知");            MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES];            //设置显示框的显示模式            hud.mode = MBProgressHUDModeText;            hud.label.text = @"请在系统设置中打开通知";            hud.animationType = MBProgressHUDAnimationFade;            //设置显示框的透明度            hud.bezelView.backgroundColor = hudBezelColor;            hud.square = NO;//设置显示框的高度和宽度bu一样            [hud hideAnimated:YES afterDelay:1.0];            self.pushSwith.on = NO;        }else{            [MyHttpDownLoad downloadWithType:LGDownloadTypePOST url:USERPUSH_URL param:@{@"ispush":@"1"} finish:^(NSData *data, NSDictionary *obj, NSError *error) {            if ([obj[@"err_code"] integerValue] == 0) {               [[NSUserDefaults standardUserDefaults] setValue:@"on" forKey:@"push"];               [[NSUserDefaults standardUserDefaults] synchronize];                }            }];        }    }else    {        [MyHttpDownLoad downloadWithType:LGDownloadTypePOST url:USERPUSH_URL param:@{@"ispush":@"0"} finish:^(NSData *data, NSDictionary *obj, NSError *error) {        if ([obj[@"err_code"] integerValue] == 0) {//                NSLog(@"关闭推送通知");           [[NSUserDefaults standardUserDefaults] setValue:@"off" forKey:@"push"];           [[NSUserDefaults standardUserDefaults] synchronize];            }        }];    }}

switchOnOrOff方法中,如果用户是打开switch,首先需要判断系统是否接收通知,如果不接收,需要提示去系统设置中打开应用的允许接收推送,如果系统接收通知,则将switch的状态传给服务器保存,服务器正确返回,将此状态用NSUserDefault保存在本地,以便下次进到包含switch的页面,正确显示switch的状态。
这样就简单实现了是否接收推送的设置,希望对大家有帮助!写的有点乱,见谅。

0 0