开发日记 —— 记录对接苹果微信登录的坑

·· 0 · 0 ·
个人开发者 苹果 flutter
超级浩码
作者
超级浩码
数字手艺人,独立开发体验师。
目录

在对接iOS微信登录时,踩了不少坑,查了很多网上的资料但是对Universal LinksAssociated Domains的配置都比较模糊,本文详细介绍怎么配置这些参数。

配置开放平台 #

如果你的应用需要使接入微信生态相关功能,如微信登录、微信支付、微信分享等,那就需要先在微信开放平台注册账号。

Alt text

完成做开发者资质认证,认证通过后,就可以进行应用接入。需要注意认证的费用为300元,提交后会有微信交托的三方认证公司给你来电确认信息,所以看到陌生电话不要直接拒接。

完成上述认证后进入正题开始接入微信登录。在开放平台管理中心创建移动应用(开发者资质可以创建50个),填写应用名称、包名等基本信息。点击下一步

Alt text

这里需要注意Universal Links的填写。

Universal Links 是苹果在 WWDC 上提出的 iOS9 的新特性之一。此特性类似于深层链接,并能够方便地通过打开一个 Https 链接来直接启动您的客户端应用(手机有安装 App)。对比起以往所使用的 URL Scheme,这种新特性在实现 web-app 的无缝链接时能够提供极佳的用户体验。

简单说这个链接就是用来打开你应用的入口,在微信中点击这个链接,就会直接跳转到你的应用。

配置成功后可以尝试在手机Safari浏览器直接访问该地址会显示打开按钮。

Alt text


配置Xcode #

此外我们还需要在Xcode中配置Associated Domains

点击Sigining & Capabilities -> Associated Domains -> +

接着在下方Domais中填写applinks:xxx.com,其中xxx.com是你的域名。

Alt text
这里的域名需要和Universal Links中的域名一致,例如:

开放平台设置

Universal Links: https://xxx.com/st/universal_link/wechat/

Xcode

Domais: applinks:xxx.com

配置文件下载地址 https://xxx.com/.well-known/apple-app-site-association

.well-known 目录是一个由互联网工程任务组(IETF)在RFC 5785中定义的特殊目录,用于存放网站的一些特定的元数据或者配置文件。这个目录通常放在网站的根目录下,使得这些配置文件可以通过一个标准和一致的方式被访问。

APP会在第一次启动的时候通过填写的域名来下载apple-app-site-association文件。 所以我们还需要在服务器对应地址下放一个apple-app-site-association的json文件,内容如下:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "${your team id}.${your app bundle id}",
        "paths": [
          "/universal_link/wechat/*"   //开放平台中的Universal Links Uri对应
        ]
      }
    ]
  }
}

客户端 #

这里只简单介绍下客户端集成不是本文重点。插件可以使用fluwx 或 wechat_kit。以fluwx为例:

    await fluwx
        .authBy(
            which: NormalAuth(
          scope: 'snsapi_userinfo',
          state: 'wechat_sdk_demo_test',
        ))
        .then((value) async {});


    fluwx.addSubscriber((response) async {
      if (response is WeChatAuthResponse) {
        await getWeChatAccessToken(response.code);
        await getUserData();
        Get.back();
      }
    });    

插件主要是完成APP->微信->APP的跳转工作,通过回调拿到code。但不是最终我们需要的openid。接着再通过接口获取openid和access_token。 详细可参考文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

  • access_token:通过code换取access_token和openid
  • userinfo:获取微信用户基本信息

这里需要注意,如果你在开放平台配置的Universal Links的不能返回200。或者Univeral Links的域名和apple-app-site-association文件中的域名不一致,都可能导致无法跳转。我们需要让APP重新下载配置文件,可以尝试删除APP并重启手机。


总结 #

总的来说,对接微信登录并不复杂,主要麻烦在于开放平台的资质认证和应用认证都分别需要审核时间。另外网上有关Univeral Links的配置资料不少,但都不详细,导致笔记最后还是一步步踩坑才调通。





评论