微信H5使用<wx-open-launch-app>跳转App不生效问题自检

621 阅读2分钟
  1. universalLink配置,一共需要检查四个地方:

    1. 微信开放平台-管理中心-移动应用-开发配置- iOS应用- iPhone应用 -Universal Links
    2. 微信开放平台-管理中心-公众号-找到自己的服务号,点击查看-接口信息-网页跳转移动应用-关联设置- JS接口安全域名
    3. Xcode:wxapi注册时填写的universal link
    4. Xcode:Associated Domains: applinks:xxx 这里填写的也要一样

    开放平台地址:open.weixin.qq.com

    以上配置必须都是一级域名,H5的域名也是这个

  2. H5注册WXApi时是服务号的AppId(微信开放平台-管理中心-公众号-找到自己的服务号)

    jweixin.config({
            debug: false,
            appId: 服务号的AppId, // 必填,公众号的唯一标识
            timestamp: timestamp, // 必填,生成签名的时间戳
            nonceStr: noncestr, // 必填,生成签名的随机串
            signature: signature, // 必填,签名
            jsApiList: [
              "updateAppMessageShareData",
              "updateTimelineShareData",
              "showOptionMenu",
              "hideMenuItems",
              "hideAllNonBaseMenuItem",
              "showAllNonBaseMenuItem",
            ], // 必填,需要使用的JS接口列表
            openTagList: ["wx-open-launch-app", "wx-open-launch-weapp"],
          });
    
  3. 跳转的appid是移动应用的Appid(微信开放平台-管理中心-移动应用)

    <wx-open-launch-app
      :appid="appid"
      :extInfo="xxx"
      @launch="handleLaunch"
      @error="handleError"
    >
      <div v-is="'script'" type="text/wxtag-template">
        <div>打开App</div>
      </div>
    </wx-open-launch-app>
    
  4. debug看一下<wx-launch-app>标签内是否生成了<script>标签,我们用的Vue,一直没有生效,渲染出来还是<div>标签,找了很久的问题。最后时把其他项目的package-lock.json文件拿过来,至今没找到是哪个版本库的问题。 我把demo传到github上,有需要的可以自取。

  5. 正式环境才能测试,测试环境点击是没有反应的,不会有弹框。一般生成<script>标签后,配置没问题就可以跳转了。

其他问题:

  1. 关于extInfo在iOS中接收的问题:

    官方文档写的是会调用SceneDelegatescene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity方法,实际回调的是scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts,获取到的数据是类似下面的格式:

    wx11111111://platformId=wechat?_wechat_sdk_erased_paste_board_data=1&_wechat_sdk_biz_data=11111&_wechat_sdk_biz_data_len=5
    

    解决方法:

    SceneDelegate.m
    
    - (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts  API_AVAILABLE(ios(13.0)) {
        NSArray *members = [URLContexts allObjects];
        UIOpenURLContext *urlContext = [members firstObject];
        
        if ([urlContext.URL.host isEqualToString:@"platformId=wechat"] ) {
            [WXApi handleOpenURL:urlContext.URL delegate:[AppShare sharedInstance]];
        } 
    }
    

    在WXApi回调中写:

    - (void)onReq:(BaseReq*)req
    {
        if ( [req isKindOfClass:[LaunchFromWXReq class]] )
        {
            LaunchFromWXReq * rex = (LaunchFromWXReq *)req;
            NSLog(@"%@", rex.message.messageExt);
        }
    }
    

    参考链接:developers.weixin.qq.com/community/d…