Android接入华为推送详细步骤

由于极光推送的到达率不高,所以项目重要集成个推,进行华为推送和小米推送

前提:先说下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进行推送了

好的,以下是一个简单的无activity应用,用于增强QQ的小米推送服务、vivo推送服务、OPPO推送服务、华为推送服务,并且用if语句判断省电政策是否关闭的Java代码示例: ```java public class App extends Application { private static final String TAG = "PushService"; @Override public void onCreate() { super.onCreate(); if (!isIgnoringBatteryOptimizations()) { requestIgnoreBatteryOptimizations(); } // 小米推送服务 if (shouldUseMiPush()) { MiPushClient.registerPush(this, "APP_ID", "APP_KEY"); Log.i(TAG, "MiPushClient initialized"); } // vivo推送服务 if (shouldUseVivoPush()) { PushClient.getInstance(getApplicationContext()).initialize(); Log.i(TAG, "VivoPushClient initialized"); } // OPPO推送服务 if (shouldUseOppoPush()) { PushManager.getInstance().register(this, "APP_ID", "APP_KEY"); Log.i(TAG, "OppoPushClient initialized"); } // 华为推送服务 if (shouldUseHuaweiPush()) { HMSAgent.init(this); Log.i(TAG, "HuaweiPushClient initialized"); } } private boolean isIgnoringBatteryOptimizations() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { String packageName = getPackageName(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName)) { return false; } } return true; } private void requestIgnoreBatteryOptimizations() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Intent intent = new Intent(); String packageName = getPackageName(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName)) { intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); startActivity(intent); } } } private boolean shouldUseMiPush() { // 判断是否是小米设备,如果是,则返回true,否则返回false return Build.MANUFACTURER.equalsIgnoreCase("Xiaomi"); } private boolean shouldUseVivoPush() { // 判断是否是vivo设备,如果是,则返回true,否则返回false String manufacturer = Build.MANUFACTURER; String model = Build.MODEL; return (manufacturer.equalsIgnoreCase("vivo") || model.toUpperCase().startsWith("VIVO")); } private boolean shouldUseOppoPush() { // 判断是否是OPPO设备,如果是,则返回true,否则返回false return Build.MANUFACTURER.equalsIgnoreCase("OPPO"); } private boolean shouldUseHuaweiPush() { // 判断是否是华为设备,如果是,则返回true,否则返回false return Build.MANUFACTURER.equalsIgnoreCase("Huawei") || Build.MANUFACTURER.equalsIgnoreCase("Honor"); } } ``` 上述代码中,我们创建了一个名为`App`的类,继承自`Application`类,并重写了`onCreate`方法。在`onCreate`方法中,我们首先判断省电政策是否关闭,如果没有关闭,则请求关闭省电政策。然后,我们根据设备厂商的不同,选择使用小米、vivo、OPPO、华为推送服务中的一个或多个。在使用推送服务时,我们需要根据各个厂商的要求,进行相应的初始化操作,例如在使用小米推送服务时,需要调用`MiPushClient.registerPush`方法进行注册;在使用vivo推送服务时,需要调用`PushClient.getInstance(getApplicationContext()).initialize()`方法进行初始化;在使用OPPO推送服务时,需要调用`PushManager.getInstance().register`方法进行注册;在使用华为推送服务时,需要调用`HMSAgent.init`方法进行初始化。需要注意的是,我们在使用`shouldUseXXXPush`方法判断是否选择使用某个厂商的推送服务时,要根据实际情况进行判断。同时,如果需要使用多个厂商的推送服务,也可以在代码中添加相应的判断语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值