iphone开发——在程序里设置push

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

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

@interface UIApplication (UIRemoteNotifications)
- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)unregisterForRemoteNotifications __OSX_AVAILABLE_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_AVAILABLE_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];
        }

 

 

 

 

希望以上思路对有这方面需求得人有帮助。以上方案我暂未用于代码实现。若有问题。请留言共同商讨。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值