集光的sdk分为公有云部署和私有云部署,两者集成的步骤大同小异,自己开发的项目使用的是极光私有云部署,个人认为集成过程主要分为两部分:
集成极光sdk, 使用极光通道进行推送
集成厂商通道并进行推送(因为app在后台被杀死的情况下无法收到推送,所以只集成极光通道实用性不大,还是需要集成厂商通道)
关于自定义的广播、设置别名、获取RegistrationId
等具体代码可以下载官网demo示例查看(Android 集成极光推送和厂商通道这篇博客写的比较详细), 自己这篇博客是对集成极光推送过程中遇到的问题,尤其是集成厂商通道过程中踩到的坑作以总结。
极光厂商给的说明文档中关于集成sdk的步骤写的比较详细,此处简单作以介绍,因为自己开发的项目中采用的是极光私有化部署,所以公有云sdk的初始化api有一定区别。
1、导入jar包或者aar包将极光的jar报或者aar放入libs目录中,并在gradle文件中作以下配置进行引用:
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
2、build.gradle配置
productFlavors {
//内网研发
develop {
applicationId 'com.****.develop'
.....
manifestPlaceholders = [
//在清单文件中引用
app_name: "金色**(内网)",
app_icon: "@mipmap/ic_launcher_nw",
//极光相关配置信息, 便于在清单文件中引用, appkey一定要和包名对应
JIGUANG_PRIVATES_CHANNEL: "developer-default",
JIGUANG_PRIVATES_APPKEY : "1023984109843aasldkfj",
JIGUANG_PRIVATES_PROCESS: ":remote",
]
}
}
要注意的是这里的applicationId对应的包名、JIGUANG_PRIVATES_APPKEY 的值一定要和极光控制台上的应用包名、appkey一致,如果不一致是收不到推送的自己就是在粘贴控制台的appkey到项目中的时候多了一个空格,造成无法收到推送,耽误了不少时间。 如下图所示
3、创建必须的组件并配置清单文件参考厂商的demo示例代码创建Service和Receiver, 并在清单文件中配置, 配置完成后不要忘记在清单文件中声明所必要的权限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<service
android:name="cn.jiguang.app.component.UserService"
android:exported="false"
android:process="${JIGUANG_PRIVATES_PROCESS}">
<intent-filter>
<action android:name="cn.jiguang.privates.intent.USER_SERVICE" />
intent-filter>
service>
<receiver
android:name="cn.jiguang.app.component.UserReceiver"
android:exported="false">
<intent-filter>
<action android:name="cn.jiguang.privates.intent.USER_RECEIVER" />
intent-filter>
receiver>
4、sdk的初始化
在Application类的onCreat方法中初始化sdk,根据自己的环境设置相应的参数值,不同版本的sdk代码会略有不同。注意不需要重新开启子线程,sdk内部有判断。
JCorePrivatesApi.configAddress(this, new Address()
// 默认连接ip,注意ip是数字组合,host才是字母组合
.setDefaultIp("100.24.24.159")
// 默认连接端口
.setDefaultPort(3000)
// 上报地址,不需要配置/v3/report和/v1/sdk/report地址,只需要http://ip+port或着域名即可
.setDefaultReportUrl("http://pricloud-master-badgeapi.glqas.jpushoa.com"));
// 必须在application.onCreate中配置,不要判断进程,sdk内部有判断
JCorePrivatesApi.configDebugMode(this, true);
// 后台没升级tag: V3.5.4-newportal-20210823-gamma.57版本,前端必须调用此方法,否则通知点击跳转有问题
// JPushPrivatesApi.configOldPushVersion(context.getApplicationContext());
// 初始化推送
JPushPrivatesApi.init(this);
5、推送的测试
如何判断sdk是否集成成功了呢? 为了避免原有apk的影响,先卸载已经安装的app,然后运行打包。
使用关键字 jiguang
过滤日志,如果获取到了RegistrationId的值就说明集成成功了, 然后在控制台使用RegistrationId进行推送测试。 要注意的是 部分手机默认通知选项是没有打开的,需要手动设置允许通知 。
集成极光通道其实并不复杂,按照厂商给的demo和说明文档集成即可,只要细心一些很容成功,需要注意的一个地方就是项目中配置的appkey、包名要和控制台设置的要一致。
二、集成厂商通道目前高版本的系统在用户安装完应用的时候,会默认勾选一个锁屏清理后台应用
的选项, 即便没有选择这个选项,当内存不足的情况下app所在的进程也会被杀死, 这种情况下极光通道是无法收到通知,所以只集成极光通道而不集成厂商通道时没有什么实用性的。
集成厂商通道的过程中踩了不少坑,有些配置注意事项极光的厂商也没有详细说明,华为厂商通道的说明文档也没有写清楚,所以耗费了很大的精力。自己开发的项目集成了华为、小米、opple这三型号手机的厂商通道, 自己遇到的坑或者说特别耗费精力的主要有如下几点:
项目不需要审核通过也可以测试(使用)推送,只要创建好应用,填写完应用信息,设置好应用签名,点击保存即可进行推送测试, 这一点华为没有给出明确说明( 而opple在页面上给出了说明,未审核通过的项目每天只能推送1000条), 自己误认为只有项目审核通过的情况下才可以测试推送,然后就吭哧吭哧开始提交审核,而准备各种审核材料(软著、权限说明、隐私证明、加固包)又是一项特别耗时的事情, 好不容易审核资料凑齐了,又因为提前索权的问题被连续拒绝了好几次。appkey相关参数配置错误的问题(例如appkey粘贴的时候多了一个空格)极光后台相关配置没有开启的问题(例如集成厂商通道时,极光控制台配置中的厂商通道优先选项自己没有打开)用户手机没有打开允许通知的权限(有些手机默认会打开通知,但是也有的手机默认情况下不允许接受通知),小米的部分手机需要在通知的设置中的广告营销选项,才可以收到推送 2.2 、 集成华为厂商通道注意: app不需要审核通过也可以测试推送,只要你的项目不需要在华为应用商店上架,完全不需要进行提交审核,准备各种审核材料的时候特别浪费时间。 自己认为集成华为厂商通道是这三种手机型号中相对来说比较复杂的一个, 集成华为厂商通道可以参考极光提供的集成文档:JPush SDK华为厂商集成文档(3.5.4 及以上)
1. 集成厂商通道的sdk将华为厂商通道的jar报放到libs目录中。
华为是通过读取agconnect-services.json来进行推送的,而其它的厂商,例如opple和小米只需要在build.gradle中文件中配置appId和appkey即可。
2. 获取agconnect-services.json文件首先打开链接华为开发者联盟,注册华为开发者账号,新建项目并创建应用,一个项目下可以创建多个应用,例如自己开发的项目有三个环境:研发、预生产、生产, 那么就可以在这个项目中创建三个应用,然后在项目中配置多渠道打包即可。关于多渠道打包可以参考官方文档 配置支持多Flavor
当我们创建好项目和应用后,填写相关的信息, 如果自己的项目不需要上架的话,那么就不用提交审核,资料随便填写就行。 填写完成后,配置应用签名。填写应用信息和设置应用签名在下图所示页面
填写完应用信息,设置完应用签名后, 点击我的项目就会进入下图所示页面,图中1位置显示的就是项目的名称,点击下拉框就可以选择不同项目。 2的位置就是选择应用的下拉框, 可以在下拉框中选择不同环境的应用
在2的位置选择正式环境的应用,然后点击3的位置下载agconnect-services.json文件, 将其放在应用app的根目录中。
json文件的内容如下所示, client这个节点中的package_name"
就是上面选择的正式环境应用的包名,appInfos就是不同环境(渠道)应用的信息 。 华为是通过读取这个json文件中的配置信息,而其它厂商是通过读取gradle中的配置信息进行推送的。
{
...
"client":{
"cp_id":"akdjfklajlfkd",
"product_id":"lakjdflkjal",
"client_id":"alskdjflkad",
"client_secret":"alkjdflkaldfa",
"project_id":"lakjsdflka",
"app_id":"kjhkj",
"api_key":"alsdjfklalkdjfla",
"package_name":"com.app.develop"
},
"oauth_client":{
"client_id":"adsfafadsf",
"client_type":1
},
"app_info":{
"app_id":"adfadfs",
"package_name":"com.app.develop"
},
...
"appInfos":[
{
"package_name":"com.app.develop.develop",
"client":{
"app_id":"afdafda"
},
"app_info":{
"package_name":"com.app.develop.develop",
"app_id":"asdfasfd"
},
"oauth_client":{
"client_type":1,
"client_id":"adfasdf"
}
},
{
"package_name":"com.app.develop.test",
"client":{
"app_id":"adfafds"
},
"app_info":{
"package_name":"com.app.develop.test",
"app_id":"adsfaf"
},
"oauth_client":{
"client_type":1,
"client_id":"adfafdadf"
}
}
]
还有一点需要注意,就是不要忘记开通推送权限,如下图所示
3. 配置gradle文件上面这种使用同一个json文件来配置多渠道的方式需要项目集成1.5.0.300及以上版本的AGC插件,所以需要在项目的gradle中进行配置, 可以参考 华为多渠道配置说明文档和极光提供的文档JPush SDK华为厂商集成文档(3.5.4 及以上)
repositories {
...
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
classpath 'com.huawei.agconnect:agcp:1.5.2.300'
}
}
allprojects {
repositories {
maven {url 'https://developer.huawei.com/repo/'}
}
}
在app的module的gradle文件中配置如下代码
apply plugin: 'com.huawei.agconnect'
android {
implementation 'com.huawei.hms:push:5.0.2.300'
}
4.配置极光后台
在极光的后台配置appid和app sec,app sec 对应的华为控制台中的Client Secret 如下图所示
然后打开厂商通道优先设置,否则默认会走极光通道
5. 测试通知以上的配置都完成后,基本就算集成完成,运行项目,如果在控制台获取到了华为厂商通道的token,就说明集成成功了。然后使用极光返回的RegistrationId进行推送测试, 测试的时候一定要注意将手机的通知打开。
6. 关于debug和release环境的调试在下图红框的位置分别添加debug和release证书sha256指纹,以便测试debug环境和release环境。
2.3 、集成小米厂商通道和opple厂商通道这两个厂商通道集成起来就相对简单些, 都是先注册账号,创建多个测试环境的应用, 填写应用信息,配置签名(小米不需要设置,opple需要设置) ,开启推送服务(这一步千万不要忘记) 。 然后在项目的gradle文件中配置appkey和appid。 此处以小米为例
1. 创建应用创建应用并填写相关信息,填写完成后如下图所示
点击应用信息就可以看到appid、appkey等信息。
2、配置项目首先是将厂商通道的jar或者aar包放到libs目录中。
然后打开gradle文件,配置appkey和appid, 如下代码所示, MI-1234134 中中划线后边的值就是小米后台注册生成的appid, 一定不要漏掉前面的MI
。
productFlavors {
//内网研发
develop {
applicationId '*********.develop'
....
manifestPlaceholders = [
XIAOMI_APPID : "MI-1234134",
XIAOMI_APPKEY : "MI-lkjfdaljlkdfj",
OPPO_APPID : "OP-12345",
OPPO_APPKEY : "OP-12345",
OPPO_APPSECRET: "OP-12345",
]
}
//预生产
check {
applicationId '*********.test'
resValue("string" , "name","预生产")
....
manifestPlaceholders = [
XIAOMI_APPKEY : "MI-akdjhfkla",//小米平台注册的appkey
XIAOMI_APPID : "MI-alkjdflka",//小米平台注册的appid
//对应的是预生产包名和debug签名
OPPO_APPID : "OP-alkjdfla",
OPPO_APPKEY : "OP-lksjdfgkskldf",
OPPO_APPSECRET: "OP-qoieuropqure",
]
}
}
opple需要配置三个值,appid和appkey分别对应opple控值台注册生成的appid和appkey, OPPO_APPSECRET对应的是下图中的 appsecret
和测试华为推送厂商通道一样,如果在日志中能够获取到小米的返回的token,就说明集成成功了,然后在极光控制台使用RegistrationId
进行推送。
需要注意小米部分型号手机需要将通知设置中的广告营销选项中的允许通知开关打开,才可以收到推送。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)