一:小米开放平台–推送服务
1:新建应用,获取AppID,AppKey
2:下载jar包,放到项目的libs目录下
3:在清单文件AndroidManifest.xml中,配置下面代码
(1)权限
<permission android:name="自己的包名.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="自己的包名.permission.MIPUSH_RECEIVE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS" />
(2)核心功能
<service
android:name="com.xiaomi.push.service.XMJobService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":pushcore" />
<service
android:name="com.xiaomi.push.service.XMPushService"
android:enabled="true"
android:process=":pushcore" />
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" />
<receiver
android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver
android:name=".自己的XiaoMiPushReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<receiver
android:name="com.xiaomi.push.service.receivers.PingReceiver"
android:exported="false"
android:process=":pushcore">
<intent-filter>
<action android:name="com.xiaomi.push.PING_TIMER" />
</intent-filter>
</receiver>
<meta-data
android:name="XIAOMI_APPKEY"
android:value="自己的KEY" />
<meta-data
android:name="XIAOMI_APPID"
android:value="自己的ID" />
4:清单文件中XiaoMiPushReceiver需要继承PushMessageReceiver,添加自己的逻辑
5:在Application中配置小米推送服务的初始化代码
MiPushClient.registerPush(this, MIAPP_ID, MIAPP_KEY);
6:通过绑定标签,账户去推送
MiPushClient.setUserAccount(this,“自己定义的”,null);
MiPushClient.setAlias(this,“自己定义的”,null);
所有工作完成之后,可以去小米开放平台发送推送消息,手机就可以收到了。
二:华为开发者联盟–推送服务
1:新建应用,配置agconnect-services.json文件,在应用级的根目录下
2:项目级别的build.gradle文件配置如下:
buildscript {
repositories {
maven { url 'https://developer.huawei.com/repo/' } // 配置HMS Core SDK的Maven仓地址。
}
dependencies {
classpath 'com.huawei.agconnect:agcp:1.4.1.300' // 增加agcp插件配置。
}
}
allprojects {
repositories {
maven {url 'http://developer.huawei.com/repo'}// 配置HMS Core SDK的Maven仓地址。
}
}
3:应用级别build.gradle文件配置如下:
implementation 'com.huawei.hms:push:5.3.0.301' //版本号根据官方最新发布的修改
4:在清单文件AndroidManifest.xml中配置下面代码:
<meta-data
android:name="com.huawei.hms.client.channel.androidMarket"
android:value="false" />
<service android:name="自己的文件HuaWeiPushRevicer" android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT"/>
</intent-filter>
</service>
<meta-data
android:name="push_kit_auto_init_enabled"
android:value="false" />
5:在业务逻辑中获取到唯一标识token
new Thread() { // 创建一个新线程
@Override
public void run() {
try {
// 从agconnect-service.json文件中读取appId
String appId = AGConnectServicesConfig.fromContext(LoginActivity.this).getString("client/app_id");
// 输入token标识"HCM"
String tokenScope = "HCM";
String token = HmsInstanceId.getInstance(LoginActivity.this).getToken(appId, tokenScope);
Log.i("华为token", "get token: " + token);
// 判断token是否为空
if(!TextUtils.isEmpty(token)) {
submitToken(token);
}
} catch (ApiException e) {
Log.e("华为token", "get token failed, " + e);
}
}
}.start();
6:获取到token之后 就可以去华为开发者联盟后台去发送测试推送消息了,不出意外是可以收到推送的
7:需要注意的是如果直接运行到手机上
上面需要选择发布版本运行,如果是debug运行,获取token会提示证书指纹验证失败。