一言而论:为unity的iOS移动端应用集成微信登录(使用cocoapod集成方式)
简单说说垃圾话
公司要求开发一个应用,目前已经包含了密码登录、验证码登录,突然说要加个微信登录,直接懵逼;赶紧看看相关资料,熟悉一下微信登录SDK集成。
其实在集成之前,笔者也曾想过是否已经有大佬将微信SDK集成做成了unitypackage的方式。但是一阵谷歌百度后,除了个叫ShareSDK的东西,其他也没有比较靠谱的包。最难顶的是ShareSDK的资料非常不全,而且客服几乎不懂开发。。当然也不排除是笔者自己找不到渠道来进一步了解。
总之,在寻找可用资料无果后,只好自己下场开始集成,好在集成这方面的文档还是比较齐全。
开始正文
使用cocoapod集成的方式,可以保证项目中的每个依赖包都是最新的(应该还有其他好处,可惜笔者理解不了所以先不写了)但是每次打包都需要重新执行pod install,如果项目只有个微信SDK,可能考虑手动集成的方式来得方便。手动集成这部分可以参考林大佬的文章。
开发机:Windows电脑
发布机:Mac mini
按照微信文档,直接丢手机上打开即可
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleID",
"paths": ["/albums/*"]
}
]
}
}
其中teamID在自己的苹果开发者平台查看账号可知;bundleID就是你在unity中设置的应用唯一ID,格式为
com.公司名.应用名称
//按照自己工程,修改links
static string[] universalLinks = { "applinks:www.baidu.com" };
///
/// 在编辑器添加iOS能力,这个代码在编辑器打包iOS项目后会自动执行
/// https://gist.github.com/kyeonw00/02f9d14fbfc51bc0457217a05460c310
///
///
///
[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();
}
//根据你上面的站点域名、“apple-app-site-association”的json文件中的path来生成
//域名+path
https://www.baidu.com/albums/123
登录开放平台,然后选择移动应用——基本信息——修改——下一页——勾选iOS应用,此时能够添加Bundleid和universal links;
如果没有应用的话,需要新建应用,等待审核
注意:这里的universal links是指带域名的!
Bundleid---------com.公司名.应用名称
universal links---------https://www.baidu.com/albums/
因为笔者这里使用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>
static void GetBundleID()
{
bundleID = PlayerSettings.applicationIdentifier;
}
///
/// 设置Xcode工程的Info.plist文件
///
///
///
[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);
});
}
}
///
/// 写入Xcode中的pinfo
///
///
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);
}
//在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版本有关
这部分可以参考林大佬的文章,笔者这里就不赘述了。不过需要注意objective-c需要在xcode上运行,否则报错,所以Windows开发需要对import的oc插件加上条件编译:非编辑器。
后续补充一下如何将做好的苹果包发布到testflight上,先埋个坑哈哈。
上述就是大致流程,可惜使用cocoapod集成的方式有个问题:每次打包都需要重新执行pod install;而且不知道为什么,笔者每次都需要勾选pods-unityframework的bitcode=yes;这部分目前都是手动的方式属实麻烦,还在寻找自动化的方式添加,也欢迎各位朋友评论!