V6项目集成华为推送流程和角标显示处理

(一) 集成资料

1.华为管理后台登录地址 :https://hwid1.vmall.com/CAS/portal/loginAuth.html
2.sdk接入说明网址:https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_agent.html?page=hmssdk_huaweipush_sdkdownload_agent
3.华为官方QQ群:662059980

(二) V6项目集成步骤和代码说明

1.华为官网申请PUSH服务:

1.1申请
点击申请按钮进行申请
1.2提交应用信息
填写应用信息后提交
1.3生成应用信息
应用信息页面

2.V6代码整合步骤:

2.1 引入华为sdk依赖库
compile 'com.huawei.android.hms:push:2.5.2.300'
2.2 build.gradle中配置maven地址
maven {
     url 'http://developer.huawei.com/repo/' 
}
2.3 AndroidManifest.xml中增加华为receiver,更换appid
 <!-- 华为推送配置 start - -->
        <!-- 第三方相关 :接收Push消息(注册、Push消息、Push连接状态、标签,LBS上报结果)广播 -->
        <meta-data
            android:name="com.huawei.hms.client.appid"
            android:value="10896842" />

        <activity
            android:name="com.huawei.hms.activity.BridgeActivity"
            android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale"
            android:excludeFromRecents="true"
            android:exported="false"
            android:hardwareAccelerated="true"
            android:theme="@android:style/Theme.Translucent">
            <meta-data
                android:name="hwc-theme"
                android:value="androidhwext:style/Theme.Emui.Translucent" />
        </activity>

        <provider
            android:name="com.huawei.hms.update.provider.UpdateProvider"
            android:authorities="${applicationId}.hms.update.provider"
            android:exported="false"
            android:grantUriPermissions="true" />

        <!-- xxx.xx.xx为CP自定义的广播名称,比如: com.huawei.hmssample. HuaweiPushRevicer -->
        <receiver android:name="com.epoint.GS.receiver.HW_Receiver">
            <intent-filter>

                <!-- 必须,用于接收TOKEN -->
                <action android:name="com.huawei.android.push.intent.REGISTRATION" />
                <!-- 必须,用于接收消息 -->
                <action android:name="com.huawei.android.push.intent.RECEIVE" />
                <!-- 可选,用于点击通知栏或通知栏上的按钮后触发onEvent回调 -->
                <action android:name="com.huawei.android.push.intent.CLICK" />
                <!-- 可选,查看PUSH通道是否连接,不查看则不需要 -->
                <action android:name="com.huawei.intent.action.PUSH_STATE" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver">
            <intent-filter>
               <!-- 接收通道发来的通知栏消息,兼容老版本PUSH -->
               <action android:name="com.huawei.intent.action.PUSH" />
            </intent-filter>         
        </receiver>       
        <!-- end -->
2.4 重写华为PushReceiver
import android.app.NotificationManager;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import com.epoint.GS.frm.CGTTipsManager;
import com.epoint.GS.task.Task_registHuaWeiPushToken;
import com.epoint.GS.utils.MyLog;
import com.epoint.frame.core.db.service.FrmDBService;
import com.epoint.frame.core.net.WebServiceUtilDAL;
import com.epoint.mobileim.utils.ImDBFrameUtil;
import com.epoint.mobileoa.action.MOABaseAction;
import com.epoint.mobileoa.action.MOAConfigKeys;
import com.epoint.mobileoa.utils.MOABaseInfo;
import com.huawei.hms.support.api.push.PushReceiver;

/*
 * 接收Push所有消息的广播接收器
 */
public class HW_Receiver extends PushReceiver {

    String TAG = "HW_Receiver";

    @Override
    public void onToken(Context context, String token, Bundle extras) {
        String belongId = extras.getString("belongId");
        String pushToken = token;
        String content = "获取token和belongId成功,token = " + token + ",belongId = " + belongId;
        MOABaseAction.writeLogThread(TAG, content);
        registHuaWeiPushToken(token);
        FrmDBService.setConfigValue(MOAConfigKeys.HW_Token, token);
        Log.i("token",pushToken);
    }

    /**
     * 注册华为token
     * @param token
     */
    private void registHuaWeiPushToken(final String token) {
        /**
         *
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                String method = "registHuaWeiPushToken";
                String url = MOABaseInfo.getPlatformWebservice();
                String namespace = "http://server.service.axis2";
                WebServiceUtilDAL ws = new WebServiceUtilDAL(url, method, namespace);
                ws.addProperty("UserGuid", MOABaseInfo.getUserGuid());
                ws.addProperty("PushToken", token);
                ws.addProperty("appguid", "moa_app_standard_v6");
                MOABaseAction.writeLogThread("注册token接口地址",url+"/"+method);
                MOABaseAction.writeLogThread("注册token","UserGuid:"+MOABaseInfo.getUserGuid()+"PushToken:"+token+"appguid:"+"moa_app_standard_v6");
                String bs = ws.start();
                MOABaseAction.writeLogThread("注册token",bs);
            }
        }).start();
    }


    @Override
    public boolean onPushMsg(Context context, byte[] msg, Bundle bundle) {
            String content = /*"收到一条Push消息: " +*/ new String(msg, "UTF-8");
        return false;
    }

    public void onEvent(Context context, Event event, Bundle extras) {
        Log.i(TAG, extras.toString());
        if (Event.NOTIFICATION_OPENED.equals(event) || Event.NOTIFICATION_CLICK_BTN.equals(event)) {
            int notifyId = extras.getInt(BOUND_KEY.pushNotifyId, 0);
            if (0 != notifyId) {
                NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                manager.cancel(notifyId);
            }
            String content = "收到通知附加消息: " + extras.getString(BOUND_KEY.pushMsgKey);
            Log.i(TAG, content);
        }
        super.onEvent(context, event, extras);
    }
}
2.5 增加判断是否为华为设备的方法(官方提供,保证使用)
    /**
     * 华为rom
     * @return
     */
    public static boolean isEMUI(Context context) {
        PackageInfo pi = null;
        PackageManager pm = context.getPackageManager();
        int hwid = 0;
        try {
            pi = pm.getPackageInfo("com.huawei.hwid", 0);
            if (pi != null) {
                hwid = pi.versionCode;
                Log.i("hwid",""+hwid);
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if(hwid==0){
            return false;
        }else{
            return true;
        }
    }
2.6 登录页面增加 华为初始化连接并实现回调
/**
*初始化连接
**/
    if (AndtoidRomUtil.isEMUI(getContext())) {
          HuaWeiPushManager.getInstance(this).connect();
    }

/**
*进行连接获取token
**/
     if (AndtoidRomUtil.isEMUI(getContext())) {
            //获取token
           HuaWeiPushManager.getTokenAsyn();
            //获取push连接状态
            HuaWeiPushManager.getPushStatus();
      }
//-----------------------------------------------------------------------

 @Override
    protected void onDestroy() {
        super.onDestroy();
        if (AndtoidRomUtil.isEMUI(getContext())) {
            HuaWeiPushManager.getInstance(this).disconnect();
        }
    }

    @Override
    public void onConnected() {

        MOABaseAction.writeLogThread("华为连接", "华为连接成功");
//        ToastUtil.toastShort(MOALoginActivity.this,"华为连接成功");
        //是否允许透传消息
        HuaWeiPushManager.setReceiveNormalMsg(true);

        new Thread(new Runnable() {
            @Override
            public void run() {
                //是否接收通知栏消息
                HuaWeiPushManager.setReceiveNotifyMsg(true);
            }
        }).start();
    }

    @Override
    public void onConnectionSuspended(int i) {
        //HuaweiApiClient异常断开连接, if 括号里的条件可以根据需要修改
    }

    //调用HuaweiApiAvailability.getInstance().resolveError传入的第三个参数
    //作用同startactivityforresult方法中的requestcode
    private static final int REQUEST_HMS_RESOLVE_ERROR = 1000;
    private String TAG = "华为";

    @Override
    public void onConnectionFailed(ConnectionResult arg0) {
        Log.i("华为连接", "HuaweiApiClient连接失败,错误码:" + arg0.getErrorCode());
        MOABaseAction.writeLogThread("华为连接", "HuaweiApiClient连接失败,错误码:" + arg0.getErrorCode());
//        ToastUtil.toastShort(MOALoginActivity.this,"HuaweiApiClient连接失败,错误码:"+arg0.getErrorCode()+"");
        if (HuaweiApiAvailability.getInstance().isUserResolvableError(arg0.getErrorCode())) {
            final int errorCode = arg0.getErrorCode();
            new Handler(getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    // 此方法必须在主线程调用, xxxxxx.this 为当前界面的activity
                    HuaweiApiAvailability.getInstance().resolveError(MOALoginActivity.this, errorCode, REQUEST_HMS_RESOLVE_ERROR);
                }
            });
        } else {
            //其他错误码请参见开发指南或者API文档
        }
    }
2.7 增加中间平台注册和注销token的接口
注册token
import com.epoint.frame.core.net.WebServiceUtilDAL;
import com.epoint.frame.core.task.BaseRequestor;
import com.epoint.mobileoa.utils.MOABaseInfo;

public class Task_registHuaWeiPushToken extends BaseRequestor {

    public String UserGuid;
    public String PushToken;
    public String appguid;

    @Override
    public Object execute() {
        String method = "registHuaWeiPushToken";
        String url = MOABaseInfo.getPlatformWebservice();
        String namespace = "http://server.service.axis2";
        WebServiceUtilDAL ws = new WebServiceUtilDAL(url, method, namespace);
        ws.addProperty("UserGuid", UserGuid);
        ws.addProperty("PushToken", PushToken);
        ws.addProperty("appguid", appguid);
        String bs = ws.start();
        return bs;
    }
}
注销token
import com.epoint.frame.core.net.WebServiceUtilDAL;
import com.epoint.frame.core.task.BaseRequestor;
import com.epoint.mobileoa.utils.MOABaseInfo;

public class Task_deleteHuaWeiPushToken extends BaseRequestor{

    public String token ;

    @Override
    public Object execute() {
        String method = "deleteHuaWeiPushToken";
        String url = MOABaseInfo.getPlatformWebservice();
        String namespace = "http://server.service.axis2";
        WebServiceUtilDAL ws = new WebServiceUtilDAL(url, method, namespace);
        ws.addProperty("token", token);
        String bs = ws.start();
        return bs;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • 前两个月接入了Android华为推送,遇到的坑真是不少,在此记录下。 坑1:有两个华为推送?我可能接入了假的华为推...
    几水阅读 19,346评论 2 3
  • 项目中要做离线仍然能接受推送的功能,只能集成有系统通道的各大厂商的推送,环信上有小米和华为的集成,但是我司的服务端...
    豁达的小刀阅读 4,279评论 0 15
  • 一阵风吹来,和着阳光,随着枝干摇摆的风采,叶子欢快的舞动着旋律,同奏一曲,哗啦啦。啦哗哗啦啦。。哗啦啦。。。。。 ...
    简小易阅读 115评论 0 0
  • 苗天华:龙哥,你可以带着吴凌云去你的地盘吗?我跟吴凌云的班级仅仅半天就被瓜分了,现在不能回去。 我呆滞地盯着苗天华...
    浮生万梦星耀烛天阅读 227评论 0 1
  • 一个人我们会先看他的外表, 然后体会他的灵魂, 谁又能一视世间万物, 脸上的污秽容易去除, 心上的污秽难以去除。
    释迦干屎橛阅读 214评论 0 6