最近做了一个跳转微信小程序付出的功能,可是发现付出完成后跳转不回原App。
一、产生原因
微信的SDK文档中要求在app
主模块的包姓名录下创立wxapi
的文件夹,然后创立一个WXPayEntryActivity
,可是我们的工程是一个组件化项目,只要商城shop
模块才需要用到付出,而且app
模块原本便是一个壳,塞这些微信的东西进去就很厌恶。
二、解决办法
运用activity署理的方式重定向微信的Acticity。
在app
主模块的清单文件中运用署理:
<application //放在application根节点中
android:name="包名.base.BaseApplication"
android:requestLegacyExternalStorage="true">
...
<!-- WXEntryActivity的署理,用于微信付出跨组件调用 -->
<activity-alias
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:targetActivity="包名.shop.WXEntryActivity"/> //这儿的WXEntryActivity能够随意改姓名,且不需要放在wxapi文件夹下
</application>
然后在shop
模块定义一个署理的方针Activity即可。
<activity
android:name=".WXEntryActivity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
在署理Activity
(姓名随意取,但建议与WXEntryActivity
同名好找好保护)中完成微信的回调逻辑即可:
class WXEntryActivity : BaseActivity<BaseViewModel, ActivityWxpayEntryBinding>(),
IWXAPIEventHandler {
private var api: IWXAPI? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
api = WXAPIFactory.createWXAPI(this, UnifyPayPlugin.getInstance(this).appId)
api?.handleIntent(intent, this)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
api?.handleIntent(intent, this)
}
override fun onReq(baseReq: BaseReq?) {
}
override fun onResp(baseResp: BaseResp?) {
if (baseResp?.type == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) { //小程序回调
//处理微信的结果回调
...
}
finish()
}
}