App与小程序对接 - Tears_fg

时间:2024-03-17 19:51:02

App与小程序对接

背景:

商品详情页,点击分享,分享到微信好友,点开链接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方法。

注意事项:

  1. 对接小程序的userName必须是小程序的原始Id。
  2. 对接小程序的path不能为空,由小程序开发者提供。
  3. 集成ShareSDK必须是完整版。
  4. 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中获取。

参考链接:

https://developers.weixin.qq.com/community/develop/doc/00080e5f8986d0b5d18a3153351800?highLine=onResp