友盟推送分享接入问题
记录接入友盟SDK时的一些问题
App推送
1. 推送消息显示已送达,但实际无通知
问题定位
在一顿官方文档FAQ查看后无果 , 于是查看日志 , 会看到这样的错误
1 | java.lang.IllegalArgumentException: ResClass未初始化 , 请确保你已经添加了必要的资源. |
看到这里 , 应该知道是资源文件找不到 , 要么是被混淆了 , 要么是路径不对 . 在确认不是混淆问题后 , 就得去找为什么资源路径出现错误
在代码定位后发现 , 以context.getPackageName(...)
为基础路径拿到的资源为 null .
通过
context.getPackageName(...)
获取到的是applicationId
. 默认情况下applicationId
与 清单文件 AndroidManifest 文件中的packageName
相同的 . 但是有些业务情况下是会进行修改 , 这样的话两者值就不一定相等了. 实际上的packageName
是项目的父路径 , 所以需要相应修改 , 还好友盟有提供这样的 api
1 | PushAgent mPushAgent = PushAgent.getInstance(context); |
参考链接
2. 厂商离线推送无通知
在集成过程中发现 , 偶发性设备接送不到厂商离线推送 . 后面查找资料发现卸载重装生成新的 Device Token
后又正常了 , 纯属玄学
参考链接
3. 华为离线推送始终收不到
集成过程中发现 , 几乎按照文档去接入的 , 却始终无法接受到离线推送 .
最终参考华为官方文档 , 需要配置 SHA256 证书指纹 . 最新的友盟文档应该也强调了需要配置这个.
参考链接
App分享
当使用友盟分享 SDK 分享到 QQ 后 , 某些情况下自己的 app 会被销毁 , 而此时返回自己的 app ,发现界面展示没有问题 , 但是屏幕点击事件一点效果都没 . 经过仔细测试发现底部物理键和 app 的手机系统栏却可以正常点击 , 且点击一次返回键后当前 app 界面也可以正常点击了 . 有点神乎其神 , 咨询了友盟技术支持 , 他们的回答无用 , 不知道是友盟的问题 , 还是 QQ 的问题.
调试过后发现 , 在分享回来时 , 栈顶的 activity 不是自己的 , 而是 com.tencent.connect.common.AssistActivity
腾讯的 activity .
此 acitvity 在 app 未被销毁时正常关闭自己 , 但是还在 app 被销毁后变量还原 , 导致某些状态丢失而无法正常关闭自己 (从分享成功后 app 再销毁 , AssistActivity 还是无法正常关闭可知并不是通过广播来关闭界面 ,而是设置了某些状态来关闭自己)
解决方案:
1 | // 执行onCretae是否是带有savedInstanceState启动的 |