关于deviceToken的改变,有三种情况:
1.在用户在新的设备上登陆
2.更新设备操作系统的时候
3.app卸载重装
解决方法:
我主要在主页进行update token api,但是也有在检测到action payment,解锁APP(输错密码三次之后)之后,登录成功等各种需要接受推送的地方 set isNeedForceUpdateAPN = YES,一旦进入主页,就会根据判断去执行update token api。。
除了以上还会setIsWalletBecomeActiveFromLaunching 判断是否执行update token api
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[PGDataManager sharedInstance] setIsWalletBecomeActiveFromLaunching:YES];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[PGDataManager sharedInstance] setIsWalletBecomeActiveFromLaunching:NO];
}
这两个方法会在kill掉app的时候执行,如果只是home键出来,再进入是不会调用 didFinishLaunchingWithOptions的
最后:token的获取:::
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
DDLogDebug(@"<%@> %@ [error:%@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error);
if ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"]) {
[[PGDataManager sharedInstance] setKeychainWithKey:kKeychainKeyAPNToken value:@"token"];
}
}
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
DDLogDebug(@"<%@> %@ [deviceToken:%@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd), deviceToken);
NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
[[PGDataManager sharedInstance] setKeychainWithKey:kKeychainKeyAPNToken value:token];
}
OK,今天的解释到这里啦,