你的位置:首页 > 操作系统

[操作系统]iOS8之后对定位和消息推送API的修改


1.定位    

 定位是定位,地图是地图,在iOS中 CLLocation是专门负责定位或者获取位置信息的;而MAPkit是专门负责地图显示的

    位置管理器(CLLocationManager) :负责获取,同时负责监控用户位置发生变化
   
    //[注意] 位置管理器一定要写成属性,不是属性出栈就没有了
    _manager = [[CLLocationManager alloc] init];
    
    //设置位置管理器代理   <CLLocationManagerDelegate>
    _manager.delegate = self;
    
    //设置最小更新位置
    _manager.distanceFilter = 50.0f;  //单位 是 “米”
    //设置定位精确度,精确度越高 越费电
    _manager.desiredAccuracy = kCLLocationAccuracyBest;

   

   [注:]苹果在iOS8里面修改了定位授权协议,也就意味着你原来的app在iOS8上很可能无法定位。目前最好的办法就是在app启动的时候调用IOS8的定位授权API来获取用户的授权,这样就不要在其他地方做修改了,如下

 

    [_manager requestAlwaysAuthorization];

    [_manager requestWhenInUseAuthorization];

     [注:]   还需要在plist文件里面对 NSLocationAlwaysUsageDescription,NSLocationWhenInUseDescription 俩个属性进行添加,value可以为空;

    //让位置管理器生效,开始更新位置变化

    [_manager startUpdatingLocation];

 

2.消息推送API的修改

 iOS常用的第三方推送服务器常用的有极光和信鸽;本次介绍信鸽服务器

 

从上图可以看出:

1.首先在你的app中注册通知, 注册通知时区别就在iOS8前后,区别如下

 

    //[注]如果你的系统是iOS8或者之后的   

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        
        
        //设置用户通知的表现形式
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil]];
        
        
        //注册远程通知  申请 device token
        [[UIApplication sharedApplication] registerForRemoteNotifications];
        
    } else {
        //[注]注册一个远程通知,这个远程通知,有文字,角标,声音
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
    }

 

    //注册信鸽服务 只有注册这个服务后,之后的数据才会发往信鸽服务器,只有注册后,信鸽服务器才可以向这个app 推送消息
    

+(void)startApp:(uint32_t)appId appKey:(NSString *)appKey;

参数说明:
     Access Id: 通过xg.qq.com注册app时得到的Access Id。
    Access key:通过xg.qq.com注册app时得到的Access key。

 

    例如: [XGPush startApp:1234567 appKey:@"IF3W91AV58NC"];

 

2、接收到 APNS 服务器返回给我们的 device token
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    
    //向信鸽注册这个设备标示符
    //注册之后信鸽的设备列表中才有你的这个真机
    NSString *token = [XGPush registerDevice:deviceToken];
    NSLog(@"token: %@",token);
    
    
}

 

3、应用程序将device token发送给PUSH服务端程序。

4、服务端程序向APNS服务发送消息。

5、APNS服务将消息发送给iPhone应用程序。