本文记录了个人在接入极光推送时遇到的坑,特别是接入华为厂商通道推送遇到的坑,如果你正在接入flutter极光推送,希望本篇文章能帮助到你。
首先,flutter版本的极光推送,我最先开始是接入的最新版本的,但是后面问了极光客服,他们说flutter插件目前统一用这个分支https://github.com/jpush/jpush-flutter-plugin/tree/dev-2.x
好吧,咱也不知道为什么,但是听人劝吃饱饭,改用了这个版本。按照官方文档初始化后,开始iOS的配置。iOS以前需要使用推送证书,现在的话,推荐使用Token Authentication。
Token Authentication是 APNs 新推出的推送鉴权方式。它相对老的证书鉴权方式有如下优势:
1.同一个账户下所有 App 无论是测试 App 还是正式版 App,都能使用同一个 key 来发推送消息和 voice-over-Internet Protocol (VoIP) 消息,不再需要为每个 App 生成一个证书。
2.生成的 Auth Key 不再有过期时间,无需像证书那样每年需要重新生成一次。
3.生成过程简单,不需要繁琐、易错的证书导出操作
集成相关步骤可以参考这篇文章:http://08643.cn/p/704673bb3e50
然后到极光后台配置iOS,选择鉴权方式Token Authentication,把下载的Token Authentication传上去,其他的相关参数一填写,iOS就配置完成。
重点来了,iOS的推送测试,只能真机测试,不能使用模拟器。
下面开始安卓的厂商通道推送,安卓如果不配置厂商通道推送,APP未打开的情况下,是收不到推送的。第一次配置,我参考了flutter 极光推送华为厂商通道推送_极光通道与厂商通道-CSDN博客,这篇文章,如果你也参考了这篇文章,那么接下来,你可能会遇到和我一样的问题。
这里集成步骤就不过多描述了,按照上面的文章集成后,我遇到的第一个问题,又是没有使用真机测试,而且你测试对应的厂商推送,需要使用对应厂商的手机,如测试华为的推送需要使用华为的手机。
当我开始测试的时候,不用说,没有成功,于是我开始找问题,首先我怀疑,在app/build.gradle里,这个版本号我没有对应:
app/build.gradle这里说的版本号和对应的JPush版本号相同,我不知道这个和对应的版本是否相同,然后咨询极光技术支持,在日志里找到了对应的版本。
好了 ,把所有的都改成了对应的版本后,小米成功了,然而华为没有成功。查看日志,提示:not support huawei,把日志提交给极光技术支持,他说打印的日志不全,建议我换个手机测试。最先开始使用的是华为nova9真机,然后我换成了华为P40,这次终于有问题出现了, 《错误码:907135000》:错误码:907135000 · BDS技术支持组。
按照这个文档给出的说法,我注意到,我按照参考的文章flutter 极光推送华为厂商通道推送_极光通道与厂商通道-CSDN博客里集成,是把agconnect-services.json文件拖到项目下面的 android/app/src 目录下,而907135000这个错误,是说我需要把agconnect-services.json放置到主工程build.gradle同级的目录中,于是修改后:
再次运行,好的,报错6003,错误码:6003 · BDS技术支持组,按照这里面说的,就是我的SHA256有问题。多次检查我的SHA256,没有出错啊,问题在哪里呢?重新配置华为的参数,也不行。我的signingConfigs如下:
我甚至把release下的SHA256和config下的SHA256都填写到了华为的后台,还是不行。
想了半天,debug我没有配置,会不会有影响,一查果然,debug没有配置,系统会使用默认的配置,这个时候,你可以配置debug使用和release一样的配置。或者你可以把debug的SHA256填写到华为后台去。
查看debug下默认的SHA256的方法:
1.先打包debug.apk,把debug.apk文件解压,在解压后的文件夹中,找到并打开名为 `META-INF` 的文件夹。在 `META-INF` 文件夹中,你可以查看其中的文件。其中,SHA256 哈希值通常位于名为 `CERT.SF` 或 `CERT.RSA` 的文件中。
2.在终端或命令提示符窗口中,导航到?`META-INF`文件所在的目录。
3.执行命令:??keytool -printcert -file CERT.RSA? ?
如下图所示:
最后,填写好了debug的SHA256后,你可能还不会马上成功,你需要等个10-30分钟,然后一定要刷新华为官网的页面,重新下载并导入agconnect-services.json。
重新运行项目,如果控制台出现下图所示,就说明配置成功了。