Android App喚起小程序,小程序返回App

爲什麼寫這篇文章呢?因爲在做App跳轉小程序,小程序返回App這個功能的時候,遇到的坑太多了,所以在這裏記錄一下。無論是微信官方文檔還是google和百度出來的文章,都有坑。
微信官方文檔鏈接地址

TIM截圖20190901175354.png

剛開始看到這個回調說明的時候,我以爲,在WXEntryActivity裏面重寫onResp方法裏面的內容就可以了。接入過微信的朋友應該知道,這個WXEntryActivity如果想要重寫onResp方法,是需要實現IWXAPIEventHandler這個接口。
然後小程序那邊,調用下面的代碼就可以返回App程序了。
<button open-type="launchApp" app-parameter="wechat" binderror="launchAppError" bindtap='openApp'>打開APP</button>

好了,一調試,發現不起作用。點擊小程序的返回App按鈕,App應用程序卡死了,感覺有點懵。

不行的話,那我們繼續看文檔,但是微信官方文檔就是那麼的簡陋,你看不出任何能解決問題的辦法。後面在google的過程中,找到了幾篇文章,綜合了一下其中的內容,最後實現了。感謝這幾篇文章給我的幫助。
文章一
文章二
文章三

下面是我項目中AndroidManifest.xml的配置

 

<!-- 在AndroidManifest.xml的WXEntryActivity中加入如下屬性:
            android:taskAffinity="your packagename"
            android:launchMode="singleTask" 保證跳轉後回到你的app的task

            這裏如果不加的話,小程序無法跳轉回APP
        -->
<activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:taskAffinity="${applicationId}"
            android:launchMode="singleTask"/>

下面是我項目中WXEntryActivity中的部分代碼

 

@Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        //第三方開發者如果使用透明界面來實現WXEntryActivity,需要判斷handleIntent的返回值
        //如果返回值爲false,則說明入參不合法未被SDK處理,應finish當前透明界面,避免外部通過傳遞非法參數的Intent導致停留在透明界面,引起用戶的疑惑
        try {
            if (!BaseApplication.getInstance().getWeiXinApi().handleIntent(getIntent(), this)) {
                finish();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

@Override
protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        BaseApplication.getInstance().getWeiXinApi().handleIntent(intent, this);
    }

 

@Override
    public void onReq(BaseReq baseReq) {
        Log.d(TAG, "onReq: " + baseReq.getType());
        switch (baseReq.getType()) {
            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
                break;
            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
                goToShowMsg((ShowMessageFromWX.Req) baseReq);
                break;
            default:
                break;
        }
    }

 

@Override
    public void onResp(BaseResp baseResp) {
        if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
            WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
            String extraData = launchMiniProResp.extMsg;  //對應小程序組件 <button open-type="launchApp"> 中的 app-parameter 屬性
            Log.d(TAG, "onResp: " + extraData);
            finish();  //需要在小程序返回APP的時候,finish這個頁面,否則其他頁面無法點擊
        }
    }


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章