一言而论:为unity的iOS移动端应用集成微信登录(使用cocoapod集成方式)
文章目录
- 前言
- 使用须知
- 环境
- 硬件环境
- 软件环境
- 使用步骤
- 1.确认微信的Universal Links正常
- 2.确认App的Universal Links配置成功
- 3.向微信注册你的应用程序id和Universal Links
- 4.集成微信SDK
- 5.微信登录代码、unity回调
- 补充
- 总结与反思
- 参考资料
前言
简单说说垃圾话
公司要求开发一个应用,目前已经包含了密码登录、验证码登录,突然说要加个微信登录,直接懵逼;赶紧看看相关资料,熟悉一下微信登录SDK集成。
其实在集成之前,笔者也曾想过是否已经有大佬将微信SDK集成做成了unitypackage的方式。但是一阵谷歌百度后,除了个叫ShareSDK的东西,其他也没有比较靠谱的包。最难顶的是ShareSDK的资料非常不全,而且客服几乎不懂开发。。当然也不排除是笔者自己找不到渠道来进一步了解。
总之,在寻找可用资料无果后,只好自己下场开始集成,好在集成这方面的文档还是比较齐全。
开始正文
使用须知
使用cocoapod集成的方式,可以保证项目中的每个依赖包都是最新的(应该还有其他好处,可惜笔者理解不了所以先不写了)但是每次打包都需要重新执行pod install,如果项目只有个微信SDK,可能考虑手动集成的方式来得方便。手动集成这部分可以参考林大佬的文章。
环境
硬件环境
开发机:Windows电脑
发布机:Mac mini
软件环境
- Visual Studio 2019
- Unity 2021.3.10f1c2
- Xcode 14.2
- Windows10
- macOS Ventura 13.2.1
使用步骤
1.确认微信的Universal Links正常
按照微信文档,直接丢手机上打开即可
2.确认App的Universal Links配置成功
- 有个云服务器,新建个IIS站点,在这个站点的根目录存放一个名称为 “apple-app-site-association”的json文件,然后文件内容根据下面模板、自己工程来修改
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleID",
"paths": ["/albums/*"]
}
]
}
}
其中teamID在自己的苹果开发者平台查看账号可知;bundleID就是你在unity中设置的应用唯一ID,格式为
com.公司名.应用名称
- json文件准备好后,在unity的Editor文件夹内新建脚本,然后包含下面方法
其中,写到代码中的universalLinks 的生成规则是:比如说你的文件地址为https://www.baidu.com/apple-app-site-association 那么,在下面这个地址中 ,你需要填写“applinks:www.baidu.com”(必须是applinks:开头)
//按照自己工程,修改links
static string[] universalLinks = { "applinks:www.baidu.com" };
/// <summary>
/// 在编辑器添加iOS能力,这个代码在编辑器打包iOS项目后会自动执行
/// https://gist.github.com/kyeonw00/02f9d14fbfc51bc0457217a05460c310
/// </summary>
/// <param name="buildTarget"></param>
/// <param name="pathToBuiltProject"></param>
[PostProcessBuild]
public static void XcodeAddCapability(BuildTarget buildTarget, string pathToBuiltProject)
{
if (buildTarget != BuildTarget.iOS)
return;
string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
ProjectCapabilityManager projCapability = new ProjectCapabilityManager(projPath, "Unity-iPhone/(entitlement file)", "Unity-iPhone");
projCapability.AddAssociatedDomains(universalLinks);
projCapability.WriteToFile();
}
- unity打包iOS,将打包后生成的所有文件丢到mac上,使用Xcode打开,插上苹果手机,然后点击Run
- 手机的safari打开链接
//根据你上面的站点域名、“apple-app-site-association”的json文件中的path来生成
//域名+path
https://www.baidu.com/albums/123
能看到下面图片,说明配置成功!
3.向微信注册你的应用程序id和Universal Links
登录开放平台,然后选择移动应用——基本信息——修改——下一页——勾选iOS应用,此时能够添加Bundleid和universal links;
如果没有应用的话,需要新建应用,等待审核
注意:这里的universal links是指带域名的!
Bundleid---------com.公司名.应用名称
universal links---------https://www.baidu.com/albums/
4.集成微信SDK
因为笔者这里使用CocoaPods自动集成,所以下面重点描写这个。手动集成可以看参考资料处林大佬的文章
- 在mac安装cocoapods
终端-》输入sudo gem install cocoapods——》验证安装,输入pod --version,出现版本号即可 - 在unity中导入External Dependency Manager for Unity(在参考资料中可见)
- 根据官方教程,新建个xml放在Editor文件夹,名称为”xxxxxxxxxDependencies.xml“,xx表示任意
- xml内容
<dependencies>
<iosPods>
<iosPod name="WechatOpenSDK-XCFramework" bitcodeEnabled="true" > </iosPod>
</iosPods>
</dependencies>
- 打包,然后丢到MAC上
- 打开终端,输入cd <刚刚你拉上来的包的路径> (快速复制路径:点中包,键盘按下command+c,也就是win+c即可);然后输入pod install;然后用后缀为.xcworkspace 的文件打开工程
- 看到下面图片说明成功下载
- 添加“URL scheme
在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id——类似wx22c22ec2222b2222
这里笔者也使用了脚本的方式自动添加:
static void GetBundleID()
{
bundleID = PlayerSettings.applicationIdentifier;
}
/// <summary>
/// 设置Xcode工程的Info.plist文件
/// </summary>
/// <param name="buildTarget"></param>
/// <param name="path"></param>
[PostProcessBuild(100)]
public static void XcodeSetInfo(BuildTarget buildTarget, string path)
{
if (buildTarget == BuildTarget.iOS)
{
GetBundleID();
//自动添加URL Types的配置
SetPInfo(path, (plist) => {
var array = plist.root.CreateArray("CFBundleURLTypes");
var urlTypeDict = array.AddDict();
urlTypeDict.SetString("CFBundleURLName", bundleID);
var urlSchemes = urlTypeDict.CreateArray("CFBundleURLSchemes");
//在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id
urlSchemes.AddString(appID);
});
}
}
/// <summary>
/// 写入Xcode中的pinfo
/// </summary>
/// <param name="projPath"></param>
static void SetPInfo(string projPath,Action<PlistDocument> action)
{
// Get the Info.plist file path.
string plistPath = Path.Combine(projPath, "Info.plist");
// Open and parse the Info.plist file.
PlistDocument plist = new PlistDocument();
plist.ReadFromFile(plistPath);
action?.Invoke(plist);
// Write the modified Info.plist file.
plist.WriteToFile(plistPath);
}
- 在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin、weixinULAPI、weixinURLParamsAPI
在方法XcodeSetInfo中添加这些代码:
//在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin、weixinULAPI、weixinURLParamsAPI
SetPInfo(path,(plist)=> {
// Add the schemes to the LSApplicationQueriesSchemes key.
PlistElementArray schemes = plist.root.CreateArray("LSApplicationQueriesSchemes");
schemes.AddString("weixin");
schemes.AddString("weixinULAPI");
schemes.AddString("weixinURLParamsAPI");
});
打包后,可以在这里搜索到,虽然名称不像。。。可能和笔者Xcode版本有关
5.微信登录代码、unity回调
这部分可以参考林大佬的文章,笔者这里就不赘述了。不过需要注意objective-c需要在xcode上运行,否则报错,所以Windows开发需要对import的oc插件加上条件编译:非编辑器。
补充
后续补充一下如何将做好的苹果包发布到testflight上,先埋个坑哈哈。
总结与反思
上述就是大致流程,可惜使用cocoapod集成的方式有个问题:每次打包都需要重新执行pod install;而且不知道为什么,笔者每次都需要勾选pods-unityframework的bitcode=yes;这部分目前都是手动的方式属实麻烦,还在寻找自动化的方式添加,也欢迎各位朋友评论!
微信官方关于集成微信SDK到ios
Unity&IOS接入微信SDK,Universal Links的配置(基于Unity5.6.6f)
unity编辑器脚本-自动添加能力
工具Landrop(Windows和MAC之间文件传输)Windows下载链接,mac在app store下载
谷歌的开源unity包《External Dependency Manager for Unity》
《External Dependency Manager for Unity》包的XML设置教程