由于极光推送的到达率不高,所以项目重要集成个推,进行华为推送和小米推送
前提:先说下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} 要替换上您应用的包名 --><permissionandroid: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-dataandroid:name="com.huawei.hms.client.appid"android:value="appid=${APPID}"/><!-- 接入HMSSDK 需要注册的provider,authorities 一定不能与其他应用一样,所以这边 ${PACKAGE_NAME} 要替换上您应用的包名<providerandroid:name="com.huawei.hms.update.provider.UpdateProvider"android:authorities="${PACKAGE_NAME}.hms.update.provider"android:exported="false"android:grantUriPermissions="true"/><!--华为相关的服务测试--><providerandroid: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、/consumer/cn/service/hms/pushservice.html
登陆账号
2、开始接入华为推送
3、解压这个包,重点来了
4、接入华为推送需要使用HMSAgent这个类和几个包,需要用GetHMSAgent.bat获取
5、这个时候需要把生成的copysrc导入项目
ka
6、看完这个路径,我有点懵,怎么顺利导入呢?
7、在项目的同级文件夹下,新建一个包就解决这个问题了
8、这样就解决了
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以来远程库,在项目的build.gradle中添加华为推送依赖库
maven {url '/repo/'}
在app的build.gradle中添加以来的版本号
compile 'com.huawei.android.hms:push:2.6.1.301'
在application中开始初始化
在Activity中开始创建连接,activity需要继承两个接口HuaweiApiClient.ConnectionCallbacks,HuaweiApiClient.OnConnectionFailedListener
//华为pushprivate void initPush() {System.out.println("初始化华为API");client = new HuaweiApiClient.Builder(this).addApi(HuaweiPush.PUSH_API).addConnectionCallbacks(this).addOnConnectionFailedListener(this).build();client.connect(this);}//连接上时@Overridepublic 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>() {@Overridepublic void onResult(TokenResult result) {//这边的结果只表明接口调用成功,是否能收到响应结果只在广播中接收,广播这块后面会有讲到String token = result.getTokenRes().getToken();System.out.println("main中的token"+token);}});}//断开@Overridepublic void onConnectionSuspended(int cause) {}//失败@Overridepublic void onConnectionFailed(ConnectionResult result) {System.out.println("华为连接失败");}
需要自己注册一个receiver继承华为的
public class MyHuaWeiReceiver extends PushReceiver {@Overridepublic void onPushMsg(Context context, byte[] msg, String token) {super.onPushMsg(context, msg, token);}@Overridepublic void onToken(Context context, String token, Bundle extras) {super.onToken(context, token, extras);System.out.println("项目token"+token);}@Overridepublic void onEvent(Context context, Event event, Bundle extras) {super.onEvent(context, event, extras);}@Overridepublic void onPushState(Context context, boolean pushState) {super.onPushState(context, pushState);}}
这样,进入华为后台就可以输入华为分配的token进行推送了