背景:
商品詳情頁,點擊分享,分享到微信好友,點開鏈接App拉起小程序。
用戶在小程序瀏覽完成,跳轉至原App購買商品。
功能點:
實現APP與小程序互調。
前提:
已對接好友盟ShareSDK(需要集成完整版SDK,精簡版拿不到回調,方法被混淆)
實現方法:
1.App喚起小程序。
ShareAction(this) .setPlatform(SHARE_MEDIA.WEIXIN) .withMedia(getUMMin()) .setCallback(shareListener) .share()
/** * 小程序 */ private fun getUMMin(): UMMin { val umMin = UMMin(link)//分享鏈接
umMin.title = title umMin.description = desc when (type) { TYPE_NORMAL -> umMin.setThumb(UMImage(this, thumb)) TYPE_CARD -> umMin.setThumb(UMImage(this, R.drawable.ic_share_logo)) } umMin.path="pages/product-detail/product-detail?ba_id=${UserUtils.getUserInfo()?.userId}&production_id=${productionId}"//拉起小程序頁面的可帶參路徑,不可為空,為空報錯
umMin.userName = WX_USERNAME //填寫小程序原始Id(非應用Id)
return umMin }
2.小程序回調跳轉App。
WXEntryActivity
class WXEntryActivity : WXCallbackActivity() { override fun onResp(resp: BaseResp?) { super.onResp(resp) } override fun onReq(req: BaseReq?) { super.onReq(req) req?.run { if (type == ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX) { goToDetail(this as? ShowMessageFromWX.Req) } } finish() } private fun goToDetail(req: ShowMessageFromWX.Req?) { try { req?.run { if (message.type == WXMediaMessage.IMediaObject.TYPE_APPDATA) { YTRouterUrlExecuter.openUrl(message?.messageExt) } } } catch (e: Exception) { e.printStackTrace() } } }
經驗證,小程序卡片打開小程序后返回App,不會回調onResp方法,而是回調onReq方法。
而分享至微信后,分享成功返回會正常走onResp方法。
注意事項:
- 對接小程序的userName必須是小程序的原始Id。
- 對接小程序的path不能為空,由小程序開發者提供。
- 集成ShareSDK必須是完整版。
- WXEntryActivity注冊必須設置taskAffinity及launchMode,否則不能正常返回。
<!-- 微信 -->
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:taskAffinity="${ApplicationId}" android:launchMode="singleTask"/>
5.回調參數在onReq中獲取。
