一直以来使用的解析方式(iOS13之前)都是如下: Objective-C: NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet...[token stringByReplacingOccurrencesOfString:@" " withString:@""]; Swift: let dataStr = NSData(data: deviceToken...[deviceToken isKindOfClass:[NSData class]]) return; const unsigned *tokenBytes = [deviceToken bytes...]; const unsigned *tokenBytes = [deviceToken bytes]; NSInteger count = deviceToken.length; for (int i...() 但是,有大神做过测试,下面这种方式最快 let token = deviceToken.reduce("", {$0 + String(format: "%02x", $1)}) //比上面解析速度快
关于提前适配iOS13 苹果推送DeviceToken的通知 随着苹果iOS13系统即将发布,个推提前推出DeviceToken适配方案,以确保新版本的兼容与APP推送服务的正常使用。...iOS13的一个重要变化是"[deviceToken description]" 会受不同运行环境及系统的影响而发生变化,如果未及时做好适配工作,会导致SDK绑定到错误的DeviceToken,从而影响...在Xcode11、iOS13运行时"[deviceToken description]",情况如下图所示: ?...针对开发者注册DeviceToken的不同场景,个推提出了相应的iOS推送SDK适配方案。 ...适配方案:因获取DeviceToken字符串的过程就是将NSData转换成HexString,在"[deviceToken description]"发出变化后,就需要开发者修改转换方案,参考代码如下图
关于推送效率,苹果官方给出的建议是当建立一个Socket通道后,尽可能将需要推送消息和接受的devicetoken连续发送至APNS服务器端。...但是,这里需要注意如果消息队列中存在不正确的devicetoken时,苹果会在接受到这个devicetoken时,强制中断当前的Socket通道,这样会造成后面的消息无法正常发送给APNS服务器。...很简单,我的做法是在一个消息队列中,每发送一条消息,就去read当前的Socket通道,苹果会在遇到错误的devicetoken后进行标记,我们可以read到这个数据,从而将错误的devicetoken...从队列中剔除,并尝试重新建立一个Socket通道,然后从错误的devicetoken后面继续推送。...那么,我们通过定期从feedback中获得这些devicetoken后,在数据库中进行标记,在下次的推送中,从消息队列中剔除这些devicetoken,这样减少了无用功,推送一次会完成的更快。
deviceToken是不透明的NSData实例,其中包含Apple分配给特定设备上特定应用程序的唯一标识符。只有APN才能解码和读取deviceToken的内容。...安装应用后第一次打开APP获取deviceToken时必须联网。如果在获取时没有网络,在重新连接网络后会第一时间返回deviceToken。 不需要缓存DeviceToken。...如果已经生成了有效的DeviceToken,系统或有缓存,在 重新安装App、重装系统、或者从备份还原系统时,会重新生成DeviceToken并更新缓存。...debug环境下是向开发环境的APNs服务器申请DeviceToken,而release环境是向生产环境的APNs服务器申请的。如果环境不匹配,则会出现Bad deviceToken错误。...deviceToken与bundleId存在着关联。如果deviceToken与证书中的bundleId不匹配,会返回DeviceTokenNotForTopic
App 获取 deviceToken 后,通过 API 将 App 的相关信息和 deviceToken 发送给应用服务器,服务器将其记录下来。...(图中步骤 4) 当要推送通知时,应用服务器按照 App 的相关信息找到存储的 deviceToken,将通知和 deviceToken 发送给 APNs。...: Data)获取 deviceToken。...如果正常获取到 deviceToken,即表示注册成功,可以进行远程通知的推送,最后需要将其发送给应用服务器。注意: App 重新启动后,deviceToken 不会变化。...: Data)获取 deviceToken。
有变化 原因: NSString *token = [deviceToken description]; token = [token stringByReplacingOccurrencesOfString...字符串了,iOS 13 通过[deviceToken description]获取到的内容已经变了。...application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken...[deviceToken isKindOfClass:[NSData class]]) return; const unsigned *tokenBytes = [deviceToken bytes...(tokenBytes[5]), ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; NSLog(@"deviceToken
3.APNs根据设备的UDID和App的Bundle Id生成deviceToken再发回给App。...4.App再将deviceToken发送给远程推送服务器(自己的服务器), 由服务器保存在数据库中。...6.APNs根据deviceToken发送给对应的用户。 · APNs 服务器就是苹果专门做远程推送的服务器。...·deviceToken是由APNs生成的一个专门找到你某个手机上的App的一个标识码。...· deviceToken 可能会变,如果你更改了你项目的bundle Identifier或者APNs服务器更新了可能会变。
具体过程,见下图 1、[Client App]注册消息推送; 2、[Client App]跟[APNS Service]要deviceToken, Client App接收deviceToken; 3、...[Client App]将deviceToken发送给[Provider]Push服务端程序; 4、当Push服务端程序满足发送消息条件了,[Provider]向[APNS Service]发送消息;...Device Token:设备令牌、用户标识 1.获取devicetoken: 1>客户端向苹果服务APNS,发送设备的UDID和英语的Bundle Identifier. 2>经苹果服务器加密生成一个...deviceToken 3>将当前用户的deviceToken(用户标识),发送给自己应用的服务器 4>自己的服务器,将得到的deviceToken,进行保存 !!!...2.获取到deviceToken后推送消息给设备 5>需要推送的时候,将消息和deviceToken一起发送给APNS,苹果服务器,再通过deviceToken找到用户,并将消息发给用户 参考文章
deviceToken的生成 当一个App注册接收远程通知时,系统会发送请求到APNs服务器,APNs服务器收到此请求会根据请求所带的key值生成一个独一无二的value值也就是所谓的deviceToken...Provider收到deviceToken以后进行储存等相关处理,以后Provider给我们的设备推送通知的时候,必须包含此deviceToken。 deviceToken到底是什么?有什么用?...服务器根据此Token key编码生成一个deviceToken。...唯一性并不是说一台设备上的一个应用程序永远只有一个deviceToken,当用户升级系统的时候deviceToken是会变化的。...{ [JPUSHService registerDeviceToken:deviceToken];//将 deviceToken 传给极光推送 } 综上,注册及接收推送 必须 使用真机
要解答你这个问题,那就必须提一下DeviceToken这个东西。只要有 DeviceToken,那么APNS 服务器就知道将消息推送到哪台 iOS 设备上。...小树接着问:那也就是说 DeviceToken 是跟设备绑定的咯? 其实你只答对了一半。 其实 DeviceToken 是跟设备和App绑定在一起的。...不同设备的同一应用,它们的 DeviceToken 是不同的。同一设备的不同应用,它们的 DeviceToken 也是不同的。...当你点击「允许」之后,你的手机便会向 APNS 服务器请求生成一个 DeviceToken,此时 APNS 服务器便将这个 DeviceToken 和这个 iOS 联系起来了。...此时,APNS 服务器将这个 DeviceToken 与该 iOS 设备绑定起来。
根据CID去查devicetoken,确认CID和devicetoken绑定是否正确。 3. 查看证书是否上传错误 4. 服务端推送的,请检查离线时间是否设置。...原因如下:换证书环境后,devicetoken是变掉了,但是CID没变导致不会立即重新绑定devicetoken(一般是24小时后会重新绑定),服务端记录的还是原来的devicetoken。...24小时内做测试的话,会因Clientid和devicetoken绑定问题导致消息接收不到,因为证书更换后的devicetoken变掉了但没有更新到服务器,导致服务端查询到的devicetoken是错误的...因证书环境变更,导致Clientid与devicetoken绑定变化,但服务端的数据没有更新,还是与旧的devicetoken绑定的。...10、生产证书下怎么获取devicetoken?
application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken...{ NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet...Success]:%@\n\n", token); // [ GTSdk ]:向个推服务器注册deviceToken,这个方法写在类别里面!...@param deviceToken deviceToken */ -(void)registerDeviceTokenToGeTuiSDK:(NSString *)deviceToken{...// 向个推服务器注册deviceToken [GeTuiSdk registerDeviceToken:deviceToken]; } /* 将收到的APNs信息传给个推统计
单点发送可以根据唯一的devicetoken发送消息给用户,因此可以把这个token和数据库中用户名进行绑定,根据用户名查询出token给指定用户发送即可。...用Autoriwed注入 youMain.sendAndroidBroadcast(model); } /** * 通过友盟发送给指定用户,这个根据devicetoken...给指定的app发送消息,这个devicetoken在给用户注册的时候可以记录下来,存到数据库 * 这个token可以跟用户名进行绑定,根据用户名去查找token,这样就可以给指定用户发送消息了...测试,您好":model.get("text")); String devicetoken = (String) model.get("devicetoken");//上面已经判断过空的情况...unicast.setDeviceToken( devicetoken); unicast.setTicker(ticker); unicast.setTitle
privatestatic int port = 2195; publicstatic void main(String[] args) throws Exception { String deviceToken...= "";//iphone手机获取的token String deviceToken2 = "";//iphone手机获取的token List deviceTokens...= new ArrayList(); deviceTokens.add(deviceToken); deviceTokens.add(deviceToken2); ...String p12FilePassword ="123456";//此处注意导出的证书密码不能为空因为空密码会报错 pushOne(p12File, p12FilePassword, deviceToken2...PushNotificationManager pushManager =PushNotificationManager.getInstance(); pushManager.addDevice("iphone", deviceToken
V2TIMAPNSConfig *confg = [[V2TIMAPNSConfig alloc] init]; confg.businessID = sdkBusiId; confg.token = self.deviceToken...*msg) { NSLog(@"-----> 设置 APNS 失败");//设置token失败 提示msg:sdk not login }]; 原因: IMSDK使用离线推送的时候需要将DeviceToken...] init]; // 企业证书 ID,上传证书到 IM 控制台后生成 confg.businessID = @"证书id"; // 苹果后台请求的 deviceToken...confg.token = _deviceToken; [[V2TIMManager sharedInstance] setAPNS:confg succ:^{
App,可以认为是由deviceID、bundleId和安装时的相关信息生成的,App的升级操作deviceToken不变,卸载重装App、恢复和重装操作系统后的deviceToken会发生变化。...苹果的APNs服务是基于deviceToken实现的,因此需要将设备的deviceToken发送到我们的业务服务器中,用于后续的消息推送。...一个设备可能登录过多个用户,一个用户也可能在多个设备中登录过,当我们需要给不同用户推送不同的消息时,除了deviceToken之外,我们还需要保存用户的openid与deviceToken的映射关系。...在新闻类App出现事实热点新闻时,后台服务就可以携带消息内容和deviceToken等内容,向苹果的APNs服务发起消息推送请求,推送消息的实现是异步的,只要请求格式和deviceToken检查通过APNs...5.1、获取设备deviceToken 在App启动时,我们可以通过UIApplication的registerForRemoteNotifications方法向苹果的APNS服务器请求deviceToken
2、 APNs服务器接受请求,并将deviceToken返给你设备上的应用程序 3、客户端应用程序将deviceToken发送给后台服务器程序,后台接收并储存。...4、 后台服务器向APNs服务器发送推送消息 5、 APNs服务器将消息发给deviceToken对应设备上的应用程序 4. 消息推送原理 ?
远程推送原理 ---- 准备工作 开发iOS程序的推送功能, iOS端需要做的事 请求苹果获得deviceToken UDID : 目的是将来可以找到手机 Bundle ID : 目的是将来可以找到手机中的程序...得到苹果返回的deviceToken 发送deviceToken给公司的服务器 监听用户对通知的点击 调试iOS的远程推送功能必备条件:真机、付费开发者账号 调试推送需要的证书文件 1> aps_development.cer...application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken...application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken...{ // 将来要在这里将Token 发送给自己的服务器做保存 NSLog(@"deviceToken: %@", deviceToken); } #pragma mark 接收到远程推送的消息时调用此方法
能解释清楚肯定就有货真价实的开发经验 使用远程推送 1、获取苹果获得deviceToken-获取手机UDID+应用的唯一标识(bundel ID) 2、得到苹果返回的deviceToken 3、发送...deviceToken给公司的服务器 4、监听用户对通知的点击 如何调试远程推送功能 1、真机 2、调试推送需要的证书文件 证书自己配置。。。...UIApplicationLaunchOptionsRemoteNotificationKey]) { // 跳转 // 添加一个红色的View } return YES; } // 获取DeviceToken...application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken...{ // 将DeviceToken传给服务器 NSLog(@"%@", deviceToken.description); } // 正常接到远程通知的时候会调用这个方法 - (void
3、关于deviceToken: 首先清楚开发环境和生产环境下的deviceToken是不一样的。同一环境下token也是会变的,比如系统恢复设置或刷机操作。...每次要推送消息时,sever从数据库取出deviceToken,如果用户把我们的app删了,再发送消息肯定是收不到了,所以server要不断的更新数据库的deviceToken去掉那些无效的deviceToken
领取专属 10元无门槛券
手把手带您无忧上云