【友盟+】开发者社区

Device_token 相关问题整理【iOS版】

友盟PUSH 发表于 2016-4-27 12:03:53 | |阅读模式

友盟PUSH
友盟PUSH 发表于 2016-4-27 12:03:53 | 显示全部楼层 |阅读模式
一. Device_token到底是什么 ?

苹果的APNs官方文档如下描述Device_token :
图片1.png

我们可以这样理解: 对于APNs来说,Device_token是设备的标识符,与app无关,所以同一台设备上,不同的app获得的device token是一样的,而苹果会根据bundleid来识别每台设备上的不同app,从而实现消息的准确推送。iOS平台的device-token是64位的字符串。
其中需要注意的是,Device_token不同于UIDevice的uniqueIdentifier(即UDID),同时,Device_token也不是固定不变的,因为出于安全和隐私原因,当设备被擦除后(重新安装,证书变化,系统更新等),Device_token都会变化。

二. 如何获取Device_token ?

开发环境下:
方法1: 在 didRegisterForRemoteNotificationsWithDeviceToken 中添加如下语句:
图片2.png

方法2: 在 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中 开启UMessage的Log,然后寻找deviceToken的字段:
图片3.png

生产环境下,用户需要用抓包工具、代理工具等自行获取Device_token(抓umengclould.com/register 里面的内容 )

三.获取不到Device_token 怎么办?

*iOS获取不到设备的Device_token 多由于集成有误或者证书配置有误造成的,建议开发者仔细按照文档流程排查问题。

下面给大家总结几个重点需要注意的地方:
请确保:
1. 使用的是真机测试,而不是模拟器。
2. 确认推送证书导出正确,详细请参考: http://bbs.umeng.com/thread-5916-1-1.html
3. 确认在App 首次运行(系统只提示一次)时是否弹出是否允许推送的对话框,如果正常弹出,请确认获取Device_token的方法是正确的的。
4. 若App 在首次运行时没有弹出是否允许推送的对话框,可以尝试把App删除后重新build运行一次,因为系统只有在第一次安装运行时提示。如果确认没有弹出,请仔细按照证书配置的要求重新生成一遍Provisioning Profiles,详细请参考:http://dev.umeng.com/push/ios/license-configuration-guide#1_2

四. 提示Device_token 无效怎么办?

提示Device_token 无效一般会有两个原因:
1. 苹果判定的无效
a. 在iOS 推送消息的过程中,会有一部分设备是苹果直接返回该设备无效,这种情况多是由于这种情况多是由于开发者将生产开发环境搞错了,上传的证书不是同一个bundleid的,或者该Device_token已经在feedback列表里面了。
b. 在iOS推送发送后,苹果会用feedback的形式反馈给友盟该设备是无效的,这种情况多是由于该App已经被卸载。
2. 友盟判定的设备无效:
关于友盟为什么会判定Device_token无效,开发者可以先了解一下这个帖子: ios9的设备为什么会收到了两条重复的推送
友盟为了防止ios9用户收到多条消息,会按照openudid和idfa做去重处理,如果相同的idfa具有了新的Device_token,友盟就会把老的Device_token判定为无效。


无效Device_token会有什么影响吗?
1. 无效的Device_token在实际使用中没有负面影响,不会导致数据的减少等。友盟的SDK每天的第一次启动会注册最新的Device_token返回给友盟服务器。
2. 去除无效的Device_token可以极大的提高推送的发送速度。

出现Device_token无效的情况,该如何排查?
1.  确认xcode的bundleid 和 上传的证书的bundleid是一致的。  mac 或linux里面有很简单的命名可以查看证书的详细信息的。
        keytool -list -keystore $1 -storepass $2 -storetype PKCS12 -v     $1: 证书的全路径   $2证书的密码
2.  确认发送的环境与该Device_token是一致的,如果一个环境不行,换另一个环境试试。 特别是ios9.2以后的设备如果开发环境提示Device_token无效,改用生产环境试试。
3.  确保发送的Device_token是这个设备最新的Device_token,特别是ios9以后的设备,Device_token会因为一些原因变化,如重新安装。
4.  友盟目前为了提高广播的筛选的效率,Device_token入库有一天的延时。该延时不会影响单播, 所以特别是刚上线第一天的app,就不要纠结生产环境的Device_token为什么都是无效的,因为现有的基本全是开发环境的。
5.  友盟后台会在下一个版本里面在【工具】模块中加入一个新的功能,方便开发者能够自行查询Device_token是不是无效的。被判定为无效的Device_token可以手动删除, 这样无效以后可以再重新测试,如果立马又变成无效的,这种情况就会是上面说的是苹果判定的无效,反之是被友盟标记的无效。








上一篇:新消息
下一篇:android友盟推送单播可以推送,所有人不行;求大神

您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

友盟启动初始化报错
版本更新后启动一直报这个错误
微信分享音乐类型失败
近期微信官方对音乐类型的分享增加了白名单限制,会导致不在白名单内的APP分享音乐类型失败 出现这种情
运行报错java.lang.NoClassDefFoundError:有人遇到过吗?
在项目中集成友盟分享功能,只加了微信、qq、微博,都是精简版。按照友盟官方的方法操作的。 签名用的友盟

关注我们

新浪微博
微信

欢迎关注友盟官方微博微信!

在线客服
返回顶部 返回列表