Android 华为移动推送 hms 服务低版本报错 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kingiis
V2EX    Android

Android 华为移动推送 hms 服务低版本报错

  •  
  •   kingiis 2019-04-19 08:42:15 +08:00 14917 次点击
    这是一个创建于 2436 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第三方:

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

    需求:

    提高推送覆盖率

    处理方案:

    透传 + 自启动

    权限开放:

    自启动 = on

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

    //HuaweiApiAvailability.etInstance().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 
    12 条回复    2019-04-19 22:54:17 +08:00
    kingiis
        1
    kingiis  
    OP
       2019-04-19 08:44:34 +08:00
    低版本太诡异 自己 sdk 都不支持 我们注释掉 它自动更新华为 hms 服务的部分 同样在低版本上放弃了这个功能
    qwwuyu
        2
    qwwuyu  
       2019-04-19 09:19:20 +08:00
    我这边是把 ActivityMgr 相关的都注释掉,一个是 HMSAgentActivity 处理连接错误,一个是 base.aar 里面的连接成功请求公告会使用到 topActivity(HuaweiApiClientImpl 类里 onConnectionResult 调用了 showNotice)。
    可以尝试使用源码,删除 base.arr 的 res、com.huawei.hms.update 包相关、hmsrootcas.bks 、UpdateSdk_release_V2.0.3.300.jar ,这样清单只需要保留 HuaweiPushRevicer 和 meta-data。
    如果不需要使用透传消息通知,可以尝试删除 com.huawei.hms.support.api.push.pushselfshow 包相关和 res,这样可以尝试只打出一个 jar 包,而不是 2 个 aar 和 2 个 jar.最近尝试了一下,暂无问题,但还未全面测试...
    kingiis
        3
    kingiis  
    OP
       2019-04-19 09:35:51 +08:00
    @qwwuyu
    app 流水太大 用户太多 对于华为推送这种集成方式的不敢大改,期待官方修改。
    我这边需要透传的,要拉起 app
    集成的 HMS_SDK_2.6.1.301.jar ,旧版推送的 sdk 都下架了找不到.
    qwwuyu
        4
    qwwuyu  
       2019-04-19 09:52:08 +08:00
    @kingiis 我也是 2.6.1.301 ,最近才开始相关开发,透传是指应用存活才可以收到的消息,不影响系统通知点击拉活推送。像 oppo xiaomi 都没有 res,hw 还有更新。。
    kingiis
        5
    kingiis  
    OP
       2019-04-19 10:02:32 +08:00
    @qwwuyu 开通自启动权限,透传可以直接拉活
    qwwuyu
        6
    qwwuyu  
       2019-04-19 10:24:46 +08:00
    @kingiis 这样啊..但是还是不明白你们流程,服务器不知道用户开启自启动权限,需要发送系统级推送,让用户点击通知拉起应用吧.溜了溜了,工作去了.
    xuhaoyangx
        7
    xuhaoyangx  
       2019-04-19 11:38:20 +08:00
    你们透传 是引导用户开启自启动?
    honeycomb
        8
    honeycomb  
       2019-04-19 11:49:10 +08:00 via Android
    @xuhaoyangx 你看是不是很没办法,连搞个推送都是为了保活
    xuhaoyangx
        9
    xuhaoyangx  
       2019-04-19 11:51:33 +08:00
    @honeycomb #8 我司要求,消息到达即可
    kingiis
        10
    kingiis  
    OP
       2019-04-19 22:49:12 +08:00
    @xuhaoyangx 对的
    如果后台透传失败会执行通知
    再不济进程内我们自己有移动端自发轮询推送
    kingiis
        11
    kingiis  
    OP
       2019-04-19 22:52:05 +08:00
    @honeycomb 保活是不可能保活的,只有发发推送,抱抱厂商大腿才能维持生存的,这个样子
    xuhaoyangx
        12
    xuhaoyangx  
       2019-04-19 22:54:17 +08:00
    @kingiis #10 我司是想自己保持长连接,没了,就走远推,有厂商的推的,走厂商推
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:19 PVG 08:19 LAX 16:19 JFK 19:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86