
您想问的是获取im token远程失败是什么原因吗?服务器没有正确响应Token验证。
获取im token远程失败是因为服务器没有正确响应Token验证,请阅读消息接口使用指南。回头检查一下各项配置是否正确。
IM是Instant Messaging的简称,也就是即时通讯,IM软件就是可以即时沟通聊天的软件,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流,钉钉就是一个IM软件。
在应用中心查看。
如果应用首次安装后使用出现闪退或无法打开,可能是应用安装包损坏或不兼容手机,建议您在应用市场重新下载并安装,如果是更新应用后出现的问题,可能是应用最新版本的问题,建议您下载安装旧应用版本尝试,或者向应用厂商进行问题反馈。
如果是第三方应 打开设置,搜索应用管理,然后找到具体应用,然后点击存储,选择删除数据尝试,可能是应用没有兼容最新的系统版本,建议您从应用市场重新进行下载使用。如果下载后,问题依然存在,建议您反馈给三方应用厂商,并向华为客服进行咨询反馈。
华为的tokentxt文件在您手机的内部存储中。一般来说,它位于/data/tokentxt/目录下,但它也可以存在其他地方,这取决于您的手机型号和安装的软件版本。您可以使用文件管理器(如ES文件浏览器)以及具有root权限的应用程序(如Magisk)来查找tokentxt文件。如果您在查找时遇到困难,可以尝试搜索论坛或技术支持网站,以获取更多有关您手机型号的信息。
集成原因,由于公司项目集成极光推送,Android 8+以上的手机,app 在未运行的情况下接收不到消息,而且现在SDK版本要更新到26,华为手机有影响。
华为推送集成,浪费了我不少时间,主要还是文档有些乱。集成之后我把它分为三部分,一,配置集成环境;二,处理接收消息。三,点击通知栏,跳转到相应页面。
compile 'comhuaweiandroidhms:push:263301'
运行GetHMSAgent_cnbat文件,
输入相应的信息包名和appid(这个需要自行申请),有一个支付id,没有可以瞎填;
选择完成之后把copysrc目录的java文件复制到自己的项目里;
AppManifestConfigxml复制到自己的app的AndroidManifestxml中;
首先根据emui版本判断是否可以使用华为推送
初始化
激活Token,并且发送到服务器
获取的token,会在相应的广播接收器中
需要在Activity或者application中注册IPushCallback监听,获取token,在发送自己的后台服务器。
华为一般有两个revicer,作用不同。下面这个根据 <intent-filter>,可以看出是用来接收token的。另外说一下,消息分为透传消息和通知栏消息。我使用的是通知栏消息,这个Revicer的透传消息没用用到。
另外一个Revicer,两个Revicer不同之处在与 <intent-filter>,功能也就不同。这
个Revicer的作用在于接收通知栏触发时间以及通知栏消息
在AndroidManifestxml中声明一个透明activity,用来中转到想要的页面
生成相应的intentUri,把它给后台,填写到华为的服务器上。点击通知栏消息,就可以直接跳转到这个HWPushTranslateActivity。
生成的intnetUri给后台就行。华为就可以隐式跳转到HWPushTranslateActivity,HWPushTranslateActivity里面获取action再跳转到相应的页面就可以了。
难点在于用GetHMSAgent_cnbat生成符合项目的文件,也不是难就是文档不清楚。另外,点击通知栏不打开启动页,需要配置HWPushTranslateActivity。
记录下在使用系统Toast存在的问题:
1 当通知权限被关闭时华为等手机Toast不显示;
2 Toast队列机制上在不同手机上可能不同;
3 Toast的BadTokenException问题;
当发现系统Toast存在问题时,不少同学使用自定义TYPE_TOASTd框来实现相同效果虽然情况下效果都是OK的,但TYPE_TOAST依然会存在问题:
4 Android80之后的token null is not valid问题(实测部分机型问题);
5 Android71之后,不允许同时展示两个TYPE_TOASTd窗(实测部分机型问题);
那么解决方案是:
相信不少同学旧项目中封装的ToastUtil都是直接使用的ApplicationContext作为上下文,然后在需要d窗的时候直接就是ToastUtilshow(str),这样的使用方式对于我们来说是最方便的啦。
当然,使用YToast你也依然可以沿用这种封装方式,但这种方式在下面这个场景中可能会无法成功展示出d窗(该场景下原生Toast也一样无法d出),不过请放心不会导致应用崩溃,而且这个场景出现的概率较小,有以下三个必要条件:
1通知栏权限被关闭(通知栏权限默认都是打开的)
2非MIUI手机
3Android80以上的部分手机(我最近测试中的几部80+设备都不存在该问题)。
不过,如果想要保证在所有场景下都能正常展示d窗,还是建议在YToastmake(context)时传入Activity作为上下文,这样在该场景下YToast会启用ActivityToast展示出d窗。
接下来再详细分析下上面提到的五个问题。
看下方Toast源码中的show()方法,通过AIDL获取到INotificationManager,并将接下来的显示流程控制权交给NotificationManagerService。NMS中会对Toast进行权限校验,当通知权限校验不通过时,Toast将不做展示。
当然不同ROM中NMS可能会有不同,比如MIUI就对这部分内容进行了修改,所以小米手机关闭通知权限不会导致Toast不显示。
如何解决这个问题?只要能够绕过NotificationManagerService即可。
YToast通过使用TYPE_TOAST实现全局d窗功能,不使用系统Toast,也没有使用NMS服务,因此不受通知权限限制。
我找了四台设备,创建两个Gravity不同的Toast并调用show()方法,结果出现了四种展示效果:
造成这个问题的原因应该是各大厂商ROM中NMS维护Toast队列的逻辑有差异。
同样的,YToast内部也维护着自己的队列逻辑,保证在所有手机上使用DToast的效果相同。
YToast中多个d窗连续出现时:
相同优先级时,会终止上一个,直接展示后一个;
不同优先级时,如果后一个的优先级更高则会终止上一个,直接展示后一个。
什么情况下windowToken会失效?
UI线程发生阻塞,导致TNshow()没有及时执行,当NotificationManager的检测超时后便会删除WMS中的该token,即造成token失效。
如何解决?
因此对于80之前的我们也需要做相同的处理。YToast是通过反射完成这个动作,具体看下方实现:
Android80后对WindowManager做了限制和修改,特别是TYPE_TOAST类型的窗口,必须要传递一个token用于校验。
API25:(PhoneWindowManagerjava源码)
API26:(PhoneWindowManagerjava源码)
为了解决问题一,DovaToast不得不选择绕过NotificationManagerService的控制,但由于windowToken是NMS生成的,绕过NMS就无法获取到有效的windowToken,于是作为TYPE_TOAST的DovaToast就可能陷入第四个问题。
因此,DToast选择在DovaToast出现该问题时引入ActivityToast,在DovaToast无法正常展示时创建一个依附于Activity的d窗展示出来,不过ActivityToast只会展示在当前Activity,不具有跨页面功能。
如果说有更好的方案,那肯定是去获取悬浮窗权限然后改用TYPE_PHONE等类型,但悬浮窗权限往往不容易获取,目前来看恐怕除了微信其他APP都不能保证拿得到用户的悬浮窗权限。
YToast的d窗策略就是同一时间最多只展示一个d窗,逻辑上就避免了此问题。因此仅捕获该异常。
其他建议
如果能够接受Toast不跨界面的话,建议使用SnackBar
您好,请在手机上面设置允许未知来源下载即可,步骤如下:
第一步,首先打开自己的华为手机,然后在手机界面找到设置选项,点击进入。
第二步,点击设置进入该界面之后,找到安全和隐私的选项,然后点击进入。
第三步,点击安全和隐私的选项进入该界面之后,点击更多安全设置的选项进入。
第四步,点击更高的安全设置进入该界面之后,找到未知来源应用下载的选项,滑动旁边的按钮点亮即可完成 *** 作。
以上就是关于获取im-token远程失败全部的内容,包括:获取im-token远程失败、华为手机的push token号在哪看、华为的token.txt文件在哪个位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)