iOS APNS device token特性

  • device token的一些特性:
  1. 开发环境获取的deviceToken和发布环境获取的deviceToken是不一样的
  2. 在一台设备中,deviceToken是系统级别的,不同App获得的deviceToken是相同的
  3. deviceToken会过期
  4. 单个App的更新deviceToken不会发生改变
  5. 当进行备份恢复、或恢复出厂设置之类的操作时,deviceToken会发生改变,建议App在每次启动时都获取deviceToken
  6. 用户抹除iPhone的数据时,为了保护隐私,deviceToken会改变
  7. 升级系统deviceToken有可能变化,猜测是升级大的系统版本后deviceToken会变化
  8. 在删除手机上的App之后,再次下载安装,deviceToken在部分系统上会改变
  • 注意: 推送相关证书只用在推送的后台即服务端使用,工程中只需打开推送相关开关即可,不需要推送证书

  • device token在iOS 13的变化

  1. iOS 13之前的版本中,大部分这样处理
    1
    2
    3
    4
    5
    6
    7
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSString *dt = [deviceToken description];
    dt = [dt stringByReplacingOccurrencesOfString: @"<" withString: @""];
    dt = [dt stringByReplacingOccurrencesOfString: @">" withString: @""];
    dt = [dt stringByReplacingOccurrencesOfString: @" " withString: @""];
    NSLog(@"**发送给服务器的token字符串***:%@\n", dt);
    }
  2. iOS 13之后的版本中,必须用以下方法处理(该方法在iOS 13之前也兼容)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSMutableString *deviceTokenString = [NSMutableString string];
    const char *bytes = (const char *)deviceToken.bytes;
    NSInteger count = deviceToken.length;
    for (int i = 0; i < count; i++) {
    [deviceTokenString appendFormat:@"%02x", bytes[i]&0x000000FF];
    }
    NSLog(@"**发送给服务器的token字符串***:%@\n", deviceTokenString);
    }
    或者
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    if (![deviceToken isKindOfClass:[NSData class]]) return;
    const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];
    NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
    ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
    ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
    ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
    NSLog(@"**发送给服务器的token字符串***:%@\n",hexToken);
    }
-------------本文结束感谢您的阅读-------------
最近的文章

iOS KVC

1. KVC简介 键/值编码中的基本调用是-valueForKey:和-setValue:forKey:方法12345NSString *name &#x3D; [car valueForKey:@&quot;name&quot;];valueForKey:会首先查找以参数名命名(格式为_name …

继续阅读
更早的文章

iOS 接入Twitter 相关注意点

1. 接入前配置 Download and unzip Twitter Kit Add TwitterKit to “Embedded Binaries” in your Xcode project settings(测试发现不添加也可以) Add TwitterKit and TwitterCo …

继续阅读