网络知识 娱乐 IOS移动应用跳转微信小程序

IOS移动应用跳转微信小程序

有项目使用到了IOS移动应用跳转微信小程序支付的 因为对接合作的银行费率低没有移动应用SDK于H5支付SDK 无奈只能使用此方式 官网文档写的很简洁明了

第一步登录苹果开发者中心配置

1.登录苹果开发者中心 打开 Associated Domains

2.在ios项目里面配置 applinks,applinks:你的域名,比如 applinks:baidu.com ,baidu.com就是域前面是固定格式(不要https://,不要加路径path)

第二步 服务器配置《必须配置》

1)创建一个json文件,名称必须为 apple-app-site-association,⚠️该文件不可带 .json 的后缀名
apple-app-site-association 文件必须放在https服务器的根目录下,例:https://baidu.com 这个路径下 ⚠️一定是根目录,也就是说该文件必须是一级目录,供下载使用

  • apple-app-site-association 文件格式:
{
"applinks": {
       "apps": [],
       "details": [
           {
               "appID": "teamID.bundleId",
               "paths": ["*"]
           }
       ]
   }
}

appID 格式为 teamID.bundleId形式,比如说我的teamID是12324,bundleId是com.test.app
那么我的appID就是:12324.com.test.app。

paths:使用*配置,则整个网站都可以使用

他是用来告诉safari(APP)那些是Universal Links。例如:https://www.baidu.com 是你的域名,path配置为["/test/*"],那么你在手机里safari打开https://www.baidu.com/test/xxx就会有app打开提示 试验图就不弄了 自行验证

验证apple-app-site-association文件 https://search.developer.apple.com/appsearch-validation-tool/ 显示如图4 则成功了有问题自行查看苹果官方文档App Search Programming Guide: Support Universal Links

第三步 集成微信sdk

集成前先简单的介绍下 

Universal Links

   要对接最新的微信sdk,你必须要了解一下Universal Links是什么,因为最新sdk根据Universal Links来判断来源app是否可信。

  IOS主流跳转方案有两种:

    1:Scheme

    2:Universal Links

  Scheme的协议是由开发者完全自定义,同时访问失败没有任何内容可以展现,所以IOS9就引入Universal Links。Universal Links 是通过域名下apple-app-site-association来确定app,因为域名又必须是https又不会重复,还能当作地址来访问网页,解决了上述两个问题。

1.官方sdk下载集成文档介绍https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/iOS_Development_example.html
2.以上步骤操作集成完过后下面我们开始接入sdk 导入头文件 WXApi.h

  1. 调用微信api注册我们的appid 与universalLink
    universalLink 你的域名比如百度 如下
[WXApi registerApp:@"微信appid 不是小程序id" universalLink:@"https://baidu.com/"];

在AppDelegate实现实现以下方法

- (BOOL)application:(UIApplication *)app
           openURL:(NSURL *)url
           options:(NSDictionary *)options {
   return  [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
   return  [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
   return [WXApi handleOpenURL:url delegate:self];
}

//对应我们配置的 Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id> * __nullable restorableObjects))restorationHandler
{
   return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

接下来开始测试
下面遇到一个坑,小程序是前段开发的就问他小程序的userName是多少,前段妹子直接报了小程序的名字,我再三确认他说小程序的userName就是小程序的名字。好吧就开始测试了。微信登录分享都正常未读小程序跳转不过去。
最好查阅资料才发现小程序的userName就是小程序的初始id 登录小程序开放中心找到点击设置
查看方法如图

   WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
   launchMiniProgramReq.userName  = @"小程序的初始id";
   launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease;
   return [WXApi sendReq:launchMiniProgramReq completion:nil];

当遇到报错weixinULAPI://" -error:"This app is not allowed to query for scheme weixinulapi...时漏写白名单了噢

如需配置微信sdk相关

其中links地址要带上https://(看微信提示文字即可)

  • 配置Url Type

填入微信开放平台对应的appid即可

如果遇到集成后每次跳转小程序都跳转两次 自检不通过        可能是apple-app-site-association服务器上没配置对 官方要求在服务器跟目录建.ewll-know目录但是这个目录是Linux的隐藏文件夹访问不到,最终需要的都是配置APPID的json串 所以解决方案可以为配置Nginx代理 将配置好的json传代理为HTTPS通用链接  

// 123.baidu.wqeq.qweq 为需要修改的APPid  path可以为当前的*
location /apple-app-site-association {
   charset UTF-8; 
   default_type text/html; 
    return 200 '{"applinks": {"apps": [],"details": [{"appID": "123.baidu.wqeq.qweq","paths": ["*"]}]}}';
  }
location /apple-app-site-association {
            charset UTF-8;
            default_type text/html;
            alias E:/XXX/XXX/apple-app-site-association;
        }

如果遇到集成后跳转小程序后在回跳APP流程中止 说明没有实现全部微信的方法请查看官方文档

其余的自行验证