当前位置: 代码迷 >> Iphone >> iPhone开发基础学习 在程序里设立Push(收藏)
  详细解决方案

iPhone开发基础学习 在程序里设立Push(收藏)

热度:29   发布时间:2016-04-25 06:25:11.0
iPhone开发基础学习 在程序里设置Push(收藏)
iPhone开发基础学习 在程序里设置Push

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

、补充:以上想法以实现。补充部分代码。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:
  myTypemyType = myType|UIRemoteNotificationTypeSound;
  break;
  case 1:
  myTypemyType = myType|UIRemoteNotificationTypeAlert;
  break;
  case 2:
  myTypemyType = myType|UIRemoteNotificationTypeBadge;
  break;
  default: 
  break;
  }
  }
  }
  if (myType != 0) {
  [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myType];
  }
  else {
  [[UIApplication sharedApplication] unregisterForRemoteNotifications];
  }
以上方案暂未用于代码实现。。。。。。。。。。。。。。
  相关解决方案