android – 对GCM Token更新过程感到困惑

编程之家收集整理的这篇文章主要介绍了android – 对GCM Token更新过程感到困惑编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

尝试实施谷歌最新的GCM服务.我已阅读 GCM documentation.我还下载了&分析了 google’s sample implementation.从以上所述我了解到以下内容: > InstanceId服务提供API以生成gcm注册令牌您发送&将此生成的令牌存储在您的应用服务器中 >这些令牌可以偶尔从客户端和instanceId服务端更改一次,如here所述.要处理此问题,您必须实现In
尝试实施谷歌最新的GCM服务.我已阅读 GCM documentation.我还下载了&分析了 google’s sample implementation.从以上所述我了解到以下内容

> InstanceID服务提供API生成gcm注册令牌您发送&将此生成的令牌存储在您的应用服务器
>这些令牌可以偶尔从客户端和instanceID服务端更改一次,如here所述.要处理此问题,您必须实现InstanceIDListenerService,InstanceID提供程序将调用onTokenRefresh,您只需编写逻辑即可获取新令牌并将其发送到服务器(Google’s sample app )
>如果您的应用服务器发送较旧的注册ID,那么GCM服务器会发送您的设备,这就是canonical_ID(as mentioned here)(这是设备发送的最后一次registration_ID).您必须使用此canonical_ID替换服务器中的现有令牌.

现在,以下是我的问题

>如果未卸载应用程序,InstanceID.getToken似乎返回相同的令牌,如果令牌未更改,则返回非常快.那么,每次启动应用程序时都可以调用RegistrationIntentService吗?这样我就可以保证一直使用最新的令牌.
>如果您的应用未连接到Play商店(没有互联网或其他东西),onTokenRefresh如何刷新? InstanceID提供商是否重试?这是在某处记录的吗?如果同时发送推送通知会发生什么?
> canonical_ID究竟是什么?它是为设备生成的最新令牌(由客户端或InstanceID提供者端的InstanceID.getToken启动)?如果canonical_ID确实是最新的gcm令牌,那么onTokenRefresh实现的需求是什么,因为如果找到canonical_ID,你可以分析推送通知数据并更新你的app服务器

解决方法

can I call the RegistrationIntentService every time I start the app?

更好的解决方案是优先保存您已设法注册令牌.仅在您尚未注册时才启动RegistrationIntentService.

String token = InstanceID.getToken(...);
//send to server
getSharedPreferences(context).edit().putBoolean(PREFIX_PREF_GCM_KEY,true).apply();

然后当你启动你的应用程序时,只需检查PREFIX_PREF_GCM_KEY是否为真

How does the onTokenRefresh if refresh happens while your app is not connected to the play store (no internet or something)

我猜这是由系统调用这个刷新过程.文件说明:

Called when the system determines that the tokens need to be refreshed. The application should call getToken() and send the tokens to all application servers.
This will not be called very frequently,it is needed for key rotation and to handle special cases.
The system will throttle the refresh event across all devices to avoID overloading application servers with token updates.

它可以在您的应用程序处于睡眠状态时调用(与收到通知时相同),但您应该对其进行测试,并确保它按预期工作.

我也认为你可以假设,虽然没有互联网连接,系统不会调用onRefreshToken,原因很简单,因为它无法接收更新通知……但是你应该一如既往地自己测试一下更新过程工作原理和条件.

What exactly is a canonical_ID?

可能是因为您错误地为服务器中的同一设备注册了多个注册ID – 例如 – onRefreshToken – 注册一个令牌而没有删除旧令牌.如果您使用旧的registartaion_ID发送邮件,Google通知您应将其更改为新邮件 – canonical_ID

总结

以上是编程之家为你收集整理的android – 对GCM Token更新过程感到困惑全部内容,希望文章能够帮你解决android – 对GCM Token更新过程感到困惑所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Android文章

优化输出文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习
作者:半身风雪上篇:ThreadLocal进阶解析系列文章简介:什么叫做CAS呢?CAS 本名叫做:Compare And Swap。本文将通过CAS 的实现,JDK中相关的原子操作,及原子操作的三大问题,来全面的解析CAS。CAS 原理解析一、什么是原子操作?如何实现原子操作?二、CAS 实现原子操作的三大问题2.1、ABA 问题2.2、开销问题2.3、只能保证一个共享变量的原子操作。三、Jdk 中相关原子操作类的使用3.1、AtomicInteger3.2、AtomicIntegerArra.
Java 内存模型即 Java Memory Model,简称JMM。JMM 定义了Java 虚拟机 (JVM)在计算机内存(RAM)中的工作方式。JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JVM 的。Java1.5 版本对其进行了重构,现在的 Java 仍沿用了 Java1.5 的版本。Jmm 遇到的问题与现代计算机中遇到的问题是差不多的。 物理计算机中的并发问题,物理机遇到的并发问题与虚拟机中的情况有不少 相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参考意义。
这是小空坚持写的Android新手向系列,欢迎品尝。大佬(√)新手(√√√)先说结论使用系统的CalendarView基本上就是自找麻烦,适宜的应用场景少之又少。还是建议使用三方封装的吧,截至2022年3月9日。https://github.com/huanghaibin-dev/CalendarView Star数8.1Khttps://github.com/prolificinteractive/material-calendarview Star数5.8Khttps://github.com/ki
Android 眼睛 显示隐藏密码(ImageView)在前端中我们知道用javascript就可以可以很容易实现,那么在Android中怎么实现这个功能呢?
Capstone反汇编的使用
JAVA开发中经常会遇到不方便使用数据库,但又要进行结构化数据计算的场景。JAVA早期没有提供相关类库,即使排序、分组这种基本计算也要硬写代码,开发效率很低。后来JAVA8推出了Stream库,凭借Lambda表达式、链式编程风格、集合函数,才终于解决了结构化数据计算类库从无到有的问题。比如排序:上面代码中的sorted是集合函数,可方便地进行排序。"(参数)->函数体"的写法即Lambda表达式,可以简化匿名函数的定义。两个sorted函数连在一起用属于链式编程风格,可以使多步骤计算变得直观。仍然以上面
用swing技术实现编写一个贪吃蛇大作战小游戏,项目供大家参考学习交流。
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注