位置管理器(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];
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應用程序。
新聞熱點
疑難解答