华为开发者联盟
- 登录华为开发者联盟账号,点击Push服务
- 添加项目
- 开通推送服务
- 开通完成后,点击我的项目,如上图
添加项目.png
,点击刚才添加的项目,进入项目详情,点击项目设置中的添加应用,按照提示完成添加。
- 添加完成后,还是进入项目详情-设置-常规,先获取证书指纹
debug证书指纹获取
Mac AndroidStudio Terminal 输入如下命令:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android
获取debug模式下的SHA256
release证书指纹获取
Mac AndroidStudio Terminal 输入如下命令:
keytool -list -v -keystore 签名地址
把获取到的证书指纹点击+号进行添加(一定要点击下对钩确定才算添加完成),添加完成后下载agconnect-services.json
文件
注意:更改了配置每次都要重新下载agconnect-services.json
文件
- 点击我的应用,找到刚才创建的应用,找到APPID 以及 SecretKey。
极光推送
- 创建应用
2.选择推送服务
- 填写App包名,以及勾选配置厂商(此处以华为为例)后,最下方提示尚未配置,点击进行配置
- 填写配置信息(在华为联盟获取到的 id 以及 key 填写上),点击保存后,右上角会出现一个启用的按钮,点击启用。点击下一步,完成配置。
项目配置
- json文件放到模块的根目录
- 根
build.gradle
添加HMS
相关
buildscript {
repositories {
...
// hms
maven { url 'http://developer.huawei.com/repo/'}
}
dependencies {
...
// hms
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
allprojects {
repositories {
...
// hms
maven { url 'http://developer.huawei.com/repo/'}
}
}
- 在
module
的gradle
中添加依赖等
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "wang"
...
ndk {
//选择要添加的对应 cpu 类型的 .so 库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "2e524", //JPush 上注册的包名对应的 Appkey.
JPUSH_CHANNEL : "developer-default" //暂时填写默认值即可.
]
}
...
}
dependencies {
...
implementation 'cn.jiguang.sdk:jcore:3.1.0'
implementation 'cn.jiguang.sdk:jpush:4.4.5'
// 接入华为厂商
// 此要与jpush版本号保持一致
implementation 'cn.jiguang.sdk.plugin:huawei:4.4.5'
// 华为官网提供的最新push版本即可
implementation 'com.huawei.hms:push:6.1.0.300'
}
apply plugin: 'com.huawei.agconnect'
- 在
AndroidManifest
中配置一个Service
<!-- Since JCore2.0.0 Required SDK核心功能-->
<!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
<!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
<service android:name="xx.xx.XService"
android:enabled="true"
android:exported="false"
android:process=":pushcore">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service>
- 在
AndroidManifest
中配置配置继承JPushMessageReceiver
的广播
<!-- Required since 3.0.7 -->
<!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
<!-- 3.3.0开始所有事件将通过该类回调 -->
<!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
<!-- 最好定义 NOTIFICATION_OPENED 此action,接管点击通知 -->
<receiver
android:name="自定义 Receiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<category android:name="您应用的包名" />
</intent-filter>
</receiver>
- 初始化推送服务
public class ExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
- 验证,运行后筛选一下token,不为空基本华为通道成功
- 注意:点击通知跳转,获取附加字段,华为厂商不走极光receiver的回调
厂商通道在onCreate()
中获取String json = getIntent().getData().toString();
极光通道在receiver
中的方法onNotifyMessageOpened()
获取String json = notificationMessage.notificationExtras;
// 通过极光通道点开,获取如下
{"key":"123"}
// 通过华为厂商通道,获取如下
{
"n_extras": {
"key": "123"
},
"n_title": "通知标题",
"n_content": "通知内容",
"msg_id": 2026642222222,
"show_type": 4,
"rom_type": 2,
"_j_data_": "{\"data_msgtype\":1,\"push_type\":4,\"is_vip\":0}"
}