Android华为推送低版本兼容问题

kingiis / 文 发表于2019-04-18 16:30 次阅读 android,华为,推送,厂商推送,华为推送

ps:本篇只适合已集成完毕华为推送sdk的开发者,在兼容上遇到的问题。
关于集成华为hms服务移动推送时遇到的问题:

第三方:

华为移动hms服务-推送服务

需求:

提高推送覆盖率

处理方案:

透传 + 自启动

权限开放:

自启动 = on

根据官方文档集成后,在华为老机型上运行时出现了崩溃.

//HuaweiApiAvailability.getInstance().resolveError(this, rstCode, REQUEST_HMS_RESOLVE_ERROR);


/**

* 代理Activity,用于弹出解决问题的引导

*/

public class HMSAgentActivityextends BaseAgentActivity {

...

    @Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        ApiClientMgr.INST.onActivityLunched();

        Intent intent = getIntent();

          finish();

        if (intent !=null) {

int rstCode =  intent.getIntExtra(CONN_ERR_CODE_TAG, 0);

            HMSAgentLog.d("dispose code:" + rstCode);

//            HuaweiApiAvailability.getInstance().resolveError(this, rstCode, REQUEST_HMS_RESOLVE_ERROR);

        }else {

            HMSAgentLog.e("intent is null");

            finish();

        }

}


定位到这行代码,当时运行的设备时cl-200 版本5.1.1

如果只是兼容不报错,注释onConnectionFailed中的以下代码即可:


ApiClientMgr.java

/**

* 建立client到service的连接失败时调用

*

     * @param result 连接结果,用于解决错误和知道什么类型的错误

*/

    @Override

    public void onConnectionFailed(ConnectionResult result) {

timeoutHandler.removeMessages(APICLIENT_TIMEOUT_HANDLE_MSG);

        if (result ==null) {

HMSAgentLog.e("result is null");

            onConnectEnd(HMSAgent.AgentResultCode.RESULT_IS_NULL);

return;

        }

int errCode = result.getErrorCode();

        HMSAgentLog.d("errCode=" + errCode +" allowResolve=" +allowResolveConnectError);

        if(HuaweiApiAvailability.getInstance().isUserResolvableError(errCode) &&allowResolveConnectError) {

Activity activity = ActivityMgr.INST.getLastActivity();

            if (activity !=null) {

try {

//

timeoutHandler.sendEmptyMessageDelayed(APICLIENT_STARTACTIVITY_TIMEOUT_HANDLE_MSG,

//APICLIENT_STARTACTIVITY_TIMEOUT);

//                    Intent intent = new Intent(activity, HMSAgentActivity.class);

//                    intent.putExtra(HMSAgentActivity.CONN_ERR_CODE_TAG, errCode);

//                    intent.putExtra(BaseAgentActivity.EXTRA_IS_FULLSCREEN, UIUtils.isActivityFullscreen(activity));

//                    activity.startActivity(intent);

                    return;

                }catch (Exception e) {

HMSAgentLog.e("start HMSAgentActivity exception:" + e.getMessage());

                    timeoutHandler.removeMessages(APICLIENT_STARTACTIVITY_TIMEOUT_HANDLE_MSG);

                    onConnectEnd(HMSAgent.AgentResultCode.START_ACTIVITY_ERROR);

return;

                }

}else {

// 当前没有界面处理不了错误

                HMSAgentLog.d("no activity");

                onConnectEnd(HMSAgent.AgentResultCode.NO_ACTIVITY_FOR_USE);

return;

            }

}else {

//其他错误码直接透传

        }

onConnectEnd(errCode);

    }


到此兼容完毕。

希望这篇文章对大家有帮助,另外:

拒绝996

收藏 赞 (1) 踩 (0)