2015-07-20 126 views
1

我正在开发一个使用推送通知的iOS应用程序。 我能够显示提醒,让用户接受或不推送通知,也捕获这些事件。我的目标是将pushstoken存储到其他用途的设置中。iOS - 当用户激活设置的推送通知时获取推送令牌

问题是,我面临的是当用户更改设置菜单中的推送通知配置。

如果用户第一次接受通知,我可以成功地存储令牌,但是如果用户拒绝并且在其他任何时刻后来打开设置中的通知,我将无法捕获该令牌。我知道didRegisterForRemoteNotificationsWithDeviceToken仅在用户第一次接受并且它以设备令牌作为参数来调用时才会调用,因此据我所知当时唯一的方法是捕获设备令牌。

问题是我需要检查用户是否启用了这些通知,所以我已经成功实现了一个方法,该方法在调用applicationDidBecomeActive时触发。它会检查设置菜单中的通知是否已被修改(启用/禁用)。

我的问题是:如果第一次从设置菜单中启用推送令牌,是否可以捕获推送令牌?如果没有,你能给我一些建议吗?

谢谢你的时间。

回答

0

我想你知道NSUserDefault。您可以将设备标记保存在NSUserDefault中。并且在需要设备令牌时从NSUserDefault收回设备标记。

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { 

    NSString *deviceId = [[devToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
    deviceId = [deviceId stringByReplacingOccurrencesOfString:@">" withString:@""]; 
    deviceId = [deviceId stringByReplacingOccurrencesOfString:@" " withString:@""]; 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setValue:[deviceId description] forKey:@"DeviceToken"]; 

    NSLog(@"Your token is: %@", [userDefaults valueForKey:@"DeviceToken"]); 

} 

步骤2:

How to retrieve device token from NSuserDefault 

    NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults]; 
    NSString *deviceToken = [userDefaults valueForKey:@"DeviceToken"]; 

NSLog(@"my device token is : %@",deviceToken); 
+2

呀。我明白你的意思。 问题是,只有在用户允许推送通知后才执行didRegisterForRemoteNotificationsWithDeviceToken(并且正如你所说的那样,我可以将标记保存在NSUserDefaults中)。我的问题是,如果用户不允许推送通知(didRegisterForRemoteNotificationsWithDeviceToken没有被调用,并且在didFailToRegisterForRemoteNotificationsWithError没有标记作为参数传递),但是后者允许设置菜单中的通知,obist令牌。 – dabasa

+0

@dabasa你找到了解决办法吗? – Chris