您的位置:首页 > 移动开发 > IOS开发

IOS学习笔记11-如何判断推送开关是否打开

2014-03-19 14:29 411 查看
最近做项目有一个需求,要在程序得系统设置里进行push的设置。在网上搜了几天资料没找着啥。今天忽然心血来潮跟踪系统注册push时得代码,居然发现有可行得解决方法,思路如下:

1、在iphone得framework里的UIApplication.h中有以下函数:

@interface UIApplication (UIRemoteNotifications)

- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types __OSX_***AILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

- (void)unregisterForRemoteNotifications __OSX_***AILABLE_STARTING(__MAC_NA,__IPHONE_3_0); // calls -registerForRemoteNotificationTypes with UIRemoteNotificationTypeNone

// returns the enabled types, also taking into account any systemwide settings; doesn't relate to connectivity

- (UIRemoteNotificationType)enabledRemoteNotificationTypes __OSX_***AILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

@end



2、首先可以用[[UIApplication sharedApplication] enabledRemoteNotificationTypes]获取到允许得push推送类型。然后再调用registerForRemoteNotificationTypes进行修改。若要关闭程序得push服务,可调用unregisterForRemoteNotifications.



3、补充:以上想法以实现。补充部分代码。settingsData为tableview的数据源数组

a、获取系push设置,用于显示给用户

//push设置



NSMutableArray * pushOptions = [[NSMutableArray alloc] init];



UIRemoteNotificationType notificationType = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];



NSMutableDictionary * soundNotice = [[NSMutableDictionary alloc] initWithObjectsAndKeys:

@"声音", @"name",

@"0", @"status",

nil];

if (notificationType & UIRemoteNotificationTypeSound) {

[soundNotice setValue:@"1" forKey:@"status"];

}

[pushOptions addObject:soundNotice];

[soundNotice release];





NSMutableDictionary * alertNotice = [[NSMutableDictionary alloc] initWithObjectsAndKeys:

@"提醒", @"name",

@"0", @"status",

nil];

if (notificationType & UIRemoteNotificationTypeAlert) {

[alertNotice setValue:@"1" forKey:@"status"];

}

[pushOptions addObject:alertNotice];

[alertNotice release];





NSMutableDictionary * badgeNotice = [[NSMutableDictionary alloc] initWithObjectsAndKeys:

@"标记", @"name",

@"0", @"status",

nil];

if (notificationType & UIRemoteNotificationTypeBadge) {

[badgeNotice setValue:@"1" forKey:@"status"];

}

[pushOptions addObject:badgeNotice];

[badgeNotice release];





NSDictionary * pushConfig = [[NSDictionary alloc] initWithObjectsAndKeys:

@"通知设置", @"groupName",

pushOptions, @"data",

nil];

[self.settingsData addObject:pushConfig];

[pushOptions release];

[pushConfig release];



b、获取用户设置的数据放入pushdata,然后向系统提交设置

NSArray * pushData = [[settingsData objectAtIndex:indexPath.section] objectForKey:@"data"];

NSInteger length = [pushData count];



UIRemoteNotificationType myType = 0;



for (NSInteger i =0; i< length; i++) {

if ([[[pushData objectAtIndex:i] objectForKey:@"status"] intValue] ==1) {

switch (i) {

case 0: myType = myType|UIRemoteNotificationTypeSound; break;

case 1: myType = myType|UIRemoteNotificationTypeAlert; break;

case 2: myType = myType|UIRemoteNotificationTypeBadge; break;

default: break;

}

}

}



if (myType != 0) {

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myType];

}else {

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: