蘋果公司不可能讓其他人獲得個人終端的唯一標識符,所以一個終端給另一個終端發(fā)送消息,必須經(jīng)過蘋果的APNS(Apple Push Notification Service)....而且蘋果為了防止蘋果用戶的唯一標示符泄露,會更新..我們在APNS存儲的唯一標識符
1. 需要告訴蘋果的服務器,當前應用程序需要接收遠程通知
2. 接收到蘋果返回的設備代號
3. 本地保存的設備代號和接收到得蘋果服務器返回的設備代號對比,當Token發(fā)生變化時,提交給服務器保存新的Token
4. 將Token保存至系統(tǒng)偏好
#import "ITAppDelegate.h"
@implementation ITAppDelegate
/**
遠程消息推送必須在真機上運行!
*/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 需要告訴蘋果的服務器,當前應用程序需要接收遠程通知
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
return YES;
}
#PRagma mark - 獲取到設備的代號(令牌)
// 接收到蘋果返回的設備代號
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// 第一次運行獲取到DeviceToken時間會比較長!
NSLog(@"%@", deviceToken);
// 將deviceToken轉(zhuǎn)換成字符串,以便后續(xù)使用
NSString *token = [deviceToken description];
NSLog(@"description %@", token);
// =======================================================
// 如果DeviceToken發(fā)生變化,需要通知服務器
// 每次都記錄住從服務器獲取到得DeviceToken
// 再次獲取時進行比對
// 從偏好設置取出當前保存的Token
NSString *oldToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"DeviceToken"];
// 當Token發(fā)生變化時,提交給服務器保存新的Token
// if (![oldToken isEqualToString:token]) {
//
// // 將deviceToken通過Post請求,提交給自己的服務器即可!
// // 發(fā)送Post請求
// NSURL *url = [NSURL URLWithString:@"公司后臺服務器的網(wǎng)址"];
// NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.f];
//
// request.HTTPMethod = @"POST";
// request.HTTPBody = @"轉(zhuǎn)換后的設備ID以及其他信息[之前的Token]";
//
// // SQL: update t_deviceTable set token = newToken where token = oldToken;
//
// // 同步:必須執(zhí)行完才能繼續(xù)
// // 異步:直接交給其他線程工作,不干擾主線程工作,用戶也感覺不到延遲
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// // 偷偷的將用戶信息傳送到公司的服務器
// }];
// }
// 將Token保存至系統(tǒng)偏好
[[NSUserDefaults standardUserDefaults] setObject:token forKey:@"DeviceToken"];
}
@end
|
新聞熱點
疑難解答