由于极光推送的到达率不高,所以项目重要集成个推,进行华为推送和小米推送
前提:先说下Mainfest文件中需要的配置,可以参考相关文件
<!--HMS-SDK引导升级HMS功能,访问OTA服务器需要网络权限 | HMS-SDK upgrade HMS Feature, access to OTA server requires network privileges-->
<uses-permission android:name="android.permission.INTERNET" />
<!--HMS-SDK引导升级HMS功能,保存下载的升级包需要SD卡写权限 | HMS-SDK upgrade HMS Feature, save downloaded upgrade pack requires SD card Write permission-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--检测网络状态 | Detecting Network status-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--检测wifi状态 | Detecting WiFi status-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--获取用户手机的IMEI,用来唯一的标识设备。 | Gets the IMEI of the user's phone, used to uniquely identify the device.-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- Android O版本调用安装需要使用该权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<!-- 接收PUSH TOKEN的广播以及PUSH消息需要定义该权限 ${PACKAGE_NAME} 要替换上您应用的包名 -->
<permission
android:name="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG"
android:protectionLevel="signatureOrSystem"/>
<!--接收PUSH TOKEN的广播以及PUSH消息需要定义该权限 ${PACKAGE_NAME} 要替换上您应用的包名 -->
<uses-permission android:name="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG" />
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=${APPID}"/>
<!-- 接入HMSSDK 需要注册的provider,authorities 一定不能与其他应用一样,所以这边 ${PACKAGE_NAME} 要替换上您应用的包名
<provider
android:name="com.huawei.hms.update.provider.UpdateProvider"
android:authorities="${PACKAGE_NAME}.hms.update.provider"
android:exported="false"
android:grantUriPermissions="true"/>
<!--华为相关的服务测试-->
<provider
android:name="com.huawei.hms.update.provider.UpdateProvider"
android:authorities="com.byx.xiuboss.xiuboss.hms.update.provider"
android:exported="false"
android:grantUriPermissions="true"/>
<receiver android:name=".receiver.MyHuaWeiReceiver"
android:permission="com.byx.xiuboss.xiuboss.permission.PROCESS_PUSH_MSG">
<intent-filter>
<!-- 必须,用于接收token -->
<action android:name="com.huawei.android.push.intent.REGISTRATION" />
<!-- 必须, 用于接收透传消息 -->
<action android:name="com.huawei.android.push.intent.RECEIVE" />
<!-- 必须, 用于接收通知栏消息点击事件 此事件不需要开发者处理,只需注册就可以-->
<action android:name="com.huawei.intent.action.PUSH_DELAY_NOTIFY"/>
</intent-filter>
</receiver>
1、https://developer.huawei.com/consumer/cn/service/hms/pushservice.html
登陆账号
2、开始接入华为推送
3、解压这个包,重点来了
4、接入华为推送需要使用HMSAgent这个类和几个包,需要用GetHMSAgent.bat获取
5、这个时候需要把生成的copysrc导入项目
ka
6、看完这个路径,我有点懵,怎么顺利导入呢?
7、在项目的同级文件夹下,新建一个包就解决这个问题了
8、这样就解决了
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以来远程库,在项目的build.gradle中添加华为推送依赖库
maven {url 'http://developer.huawei.com/repo/'}
在app的build.gradle中添加以来的版本号
compile 'com.huawei.android.hms:push:2.6.1.301'
在application中开始初始化
在Activity中开始创建连接,activity需要继承两个接口 HuaweiApiClient.ConnectionCallbacks,HuaweiApiClient.OnConnectionFailedListener
//华为push
private void initPush() {
System.out.println("初始化华为API");
client = new HuaweiApiClient.Builder(this)
.addApi(HuaweiPush.PUSH_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
client.connect(this);
}
//连接上时
@Override
public void onConnected() {
getTokenAsyn();
}
private void getTokenAsyn() {
if(!client.isConnected()) {
Log.i("aaaa", "获取token失败,原因:HuaweiApiClient未连接");
return;
}
PendingResult<TokenResult> tokenResult = HuaweiPush.HuaweiPushApi.getToken(client);
tokenResult.setResultCallback(new ResultCallback<TokenResult>() {
@Override
public void onResult(TokenResult result) {
//这边的结果只表明接口调用成功,是否能收到响应结果只在广播中接收,广播这块后面会有讲到
String token = result.getTokenRes().getToken();
System.out.println("main中的token"+token);
}
});
}
//断开
@Override
public void onConnectionSuspended(int cause) {
}
//失败
@Override
public void onConnectionFailed(ConnectionResult result) {
System.out.println("华为连接失败");
}
需要自己注册一个receiver继承华为的
public class MyHuaWeiReceiver extends PushReceiver {
@Override
public void onPushMsg(Context context, byte[] msg, String token) {
super.onPushMsg(context, msg, token);
}
@Override
public void onToken(Context context, String token, Bundle extras) {
super.onToken(context, token, extras);
System.out.println("项目token"+token);
}
@Override
public void onEvent(Context context, Event event, Bundle extras) {
super.onEvent(context, event, extras);
}
@Override
public void onPushState(Context context, boolean pushState) {
super.onPushState(context, pushState);
}
}
这样,进入华为后台就可以输入华为分配的token进行推送了