美文网首页
V6项目集成华为推送流程和角标显示处理

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

作者: 飞的翔 | 来源:发表于2018-09-08 22:38 被阅读0次

    (一) 集成资料

    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;
        }
    }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/pailgftx.html