Android app跳轉(zhuǎn)微信小程序,返回app遇到的各種坑
在此,吐槽下微信官方文檔寫的太口吐芬芳了,開發(fā)如題的功能時(shí)候,一看微信官網(wǎng)文檔app拉起小程序,發(fā)現(xiàn)如此簡(jiǎn)單,短短的幾行代碼就可以,如果你和我一樣,按照官方文檔,會(huì)發(fā)現(xiàn)我們還是太年輕,代碼一模一樣,但是沒有效果。下面開始填坑之路:
填坑1:AppId

這里的AppId是Android應(yīng)用的appid,不是小程序的AppId
填坑2:AndroidManifest.xml的配置
在AndroidManifest.xml的WXEntryActivity中加入如下屬性:
android:taskAffinity="your packagename"
android:launchMode="singleTask"
這里如果不加的話,小程序無法跳轉(zhuǎn)回APP
填坑3:WXEntryActivity實(shí)現(xiàn)IWXAPIEventHandler接口
public class WXEntryActivity extends Activity implements IWXAPIEventHandler
填坑4:在onResp里面finish,不然WXEntryActivity是透明的,導(dǎo)致app無法操作
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
String extraData = launchMiniProResp.extMsg; //對(duì)應(yīng)小程序組件 <button open-type="launchApp"> 中的 app-parameter 屬性
LogUtils.i("小程序==" + extraData);
finish();
}
}
填坑5:在onCreate處理返回值
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// 通過WXAPIFactory工廠,獲取IWXAPI的實(shí)例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
//注意:
//第三方開發(fā)者如果使用透明界面來實(shí)現(xiàn)WXEntryActivity,需要判斷handleIntent的返回值,如果返回值為false,則說明入?yún)⒉缓戏ㄎ幢籗DK處理,應(yīng)finish當(dāng)前透明界面,避免外部通過傳遞非法參數(shù)的Intent導(dǎo)致停留在透明界面,引起用戶的疑惑
try {
if (!api.handleIntent(getIntent(), this)) {
finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}