客户端通过
(void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types
这个函数向APNs(Apple Push Service)注册push,types可标明接收的push的类型,声音,数字等。
(void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData )deviceToken;
当app成功注册通知后,会调用这个函数,并把deviceToken返回给应用。
然后我们的程序就会把返回的这个deviceToken以及设备的udid及软件版本(淘宝 for iPhone还是淘宝 for iPad)及系统版本,用户名等发送到我们的服务器(下图中的provider)上,然后存储在数据库里。整个获取device token的过程可参见下图所示:
APNs可以根据与APNs建立连接的Provider所使用的证书判断是要哪个app请求发送的notification,继而把这个notification发送到的设备上。
下图为一个简单的从Provider到Device发送push的过程:
对于APS来说,token是设备的标识符。device token不同于UIDevice的uniqueIdentifier(即UDID),因为出于安全和隐私原因,当设备被擦除后,token必须变化。
所以也就是说,一般情况下,token是不变的,但是在设备被擦除后,token会变的。
今天无心说在我们的服务器上的数据库里,存在同一个UDID对应有多个token的情况,之前是没有考虑到设备擦除的情况,所以就怀疑是不是同一个 设备上同时装了taobao4iphone和taobao4ipad,而token是与app关联的,所以产生的这种情况,于是就找了杨匡的ipad来做 测试,结果发现taobao4iphone和taobao4ipad收到的token是相同的,所以token应该是与app无关的,而是针对设备的(文 档上也是如此描述的),是设备的标识,那除了设备被擦除的情况外,设备的device token 应该是相同的,可是杨匡说之前崇厚给他查出来的他的iPad的token和我log出来的device token是不同的,后来就想到了,push是有两套的,development和product,即调试和release,在这两种情况下,服务端使用 的push证书是不一样的,而程序使用的证书也不一样,那同一个设备在development和distribution情况下收到的device token是否一样呢,于是就做了实验,实际结果如下
实验设备:iPad 1
<img size-full="" wp-image-39"="" src=">题主是否想询问“i厦门显示无法获取token怎么办”?
1、网络原因,由于网络不稳定导致加载时候,可以尝试更换手机上的网络之后重新登录游戏,重新登录后即可正常进入游戏。
2、服务器崩溃,由于服务器崩溃导致在登录游戏的时候显示获取token失败,尝试更换其他大区进入。
3、服务器维护,正处于维护状态导致在登录游戏的时候显示获取token失败,可以前往官网查看维护公告知晓维护情况。编写pushnotification之获取devicetoken - pengyingh - 博客园:
>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)