厂商推送平台-华为接入

华为推送官方文档

大概流程我就不在赘述了,主要说明一下接入过程成可能遇到的问题。

第一、下载HMS SDK Agent套件(必选)

1.1 从官网下载到套件以后,解压文件后,你会看到这样的目录(copysrc是后面生成的,可以忽略)
厂商推送平台-华为接入_第1张图片
1.2 执行GetHMSAgent.bat脚本,根据脚本提示以及自己需求,会生成copysrc文件夹

1.3 然后把copysrc里面的内容拷贝到自己项目里面按
厂商推送平台-华为接入_第2张图片
1.4 在Application里面进行初始化

      String manufacturer = android.os.Build.MANUFACTURER;
        LogUtils.i(TAG, "手机厂商信息:" + manufacturer);
        //华为推送
        if ("huawei".equals(manufacturer.toLowerCase()) || "honor".equals(manufacturer.toLowerCase())) {
            if (getHuaWeiEmui() >= 9) {
                HMSAgent.init(this);
                return;
            }
        }
/**
     * EMUI版本号判断代码如下:(判断emuiApiLevel>=9即可)
     *
     * @return
     */
    private int getHuaWeiEmui() {
        int emuiApiLevel = 0;
        try {
            Class cls = Class.forName("android.os.SystemProperties");
            Method method = cls.getDeclaredMethod("get", new Class[]{String.class});
            emuiApiLevel = Integer.parseInt((String) method.invoke(cls, new Object[]{"ro.build.hw_emui_api_level"}));
        } catch (Exception e) {
            e.printStackTrace();

        }
        return emuiApiLevel;
    }

第二、Manifest的配置

2.1、在生成的copysrc文件夹下,已经帮你生成相关的manifest的配置信息了
厂商推送平台-华为接入_第3张图片
2.2、如果是单点推送的话,可以指定推送目标的token,那这个token从哪里获取呢?这是就需要我们实现PushReceiver。同时还需要我们在Manifest里面进行配置

public class HuaWeiPushReceiver extends PushReceiver {
    private static final String TAG=HuaWeiPushReceiver.class.getCanonicalName();

    /**
     * 供子类继承,用来接收token
     *开发者自行实现Token保存逻辑。
     * @param context 上下文信息
     * @param token   push token
     * @param extras  附加信息
     */
    @Override
    public void onToken(Context context, String token, Bundle extras) {
        super.onToken(context, token, extras);
        LogUtils.i(TAG,"onToken:"+token);
        PreferenceImpl.getPreference(context).put(CacheConstants.PUSH_REGISTER_ID,token);
    }

}
 
            
                
                
                
                
                
                
            
        

第三、点击通知行为

3.1、从服务端在发送通知的配置字段说明,可以看到,点击通知后,支持三种行为(1、自定义;2、指定URL;3、APP首页),我们常用的是第一个,自定义
厂商推送平台-华为接入_第4张图片
3.1.1 自定义的话,就需要客户端生成intent内容

在客户端先执行下面的代码并打印出intentUri值,然后把生成的intentUri字符串给服务端即可。

Intent intent = new Intent();
intent.setClass(MainActivity.this, 要跳转的Activity);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.putExtra("ext1","helloExt1");
intent.putExtra("ext2","helloExt2");
String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME);

manifest中 在指定注册Activity的地方(就是ActivityA)加上。


      
      
          

此外需要加上android:launchMode="singleTask"来配合newIntent来使用反复接收Intent。

如果想让服务端携带缺省数据的话,就按照intentUri的格式,把缺省数据拼接到里面,客户端通过Intent即可获取到服务端携带的缺省数据。

intentUri格式:

intentUri:intent:#Intent;launchFlags=0x10000000;component=com.***.***/com.huawei.***. ActivityA;S.ext1=helloExt1;S.ext2=helloExt2;end

缺省数据可以使用S.key=value的方式拼接到intentUri

第四、清理应用通知栏消息

NotificationManager nm 
=(NotificationManager)PushActivity.this.getSystemService(Context.NOTIFICATION_SERVICE);
 nm.cancelAll();

你可能感兴趣的:(各大厂商系统推送接入总结)