Unity iOS 集成微信登录(cocoapod集成方式)

一言而论:为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配置成功

  1. 有个云服务器,新建个IIS站点,在这个站点的根目录存放一个名称为 “apple-app-site-association”的json文件,然后文件内容根据下面模板、自己工程来修改
 {
    "applinks": {
        "apps": [],
        "details": [
        	{
            	"appID": "teamID.bundleID",
            	"paths": ["/albums/*"]
            }
         
        ]
    }
}

其中teamID在自己的苹果开发者平台查看账号可知;bundleID就是你在unity中设置的应用唯一ID,格式为

com.公司名.应用名称
  1. 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" };

    /// 
    /// 在编辑器添加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();
    }

  1. unity打包iOS,将打包后生成的所有文件丢到mac上,使用Xcode打开,插上苹果手机,然后点击Run
  2. 手机的safari打开链接
//根据你上面的站点域名、“apple-app-site-association”的json文件中的path来生成
//域名+path
https://www.baidu.com/albums/123 

能看到下面图片,说明配置成功!
Unity iOS 集成微信登录(cocoapod集成方式)_第1张图片

3.向微信注册你的应用程序id和Universal Links

登录开放平台,然后选择移动应用——基本信息——修改——下一页——勾选iOS应用,此时能够添加Bundleid和universal links;
如果没有应用的话,需要新建应用,等待审核
注意:这里的universal links是指带域名的!

Bundleid---------com.公司名.应用名称
universal links---------https://www.baidu.com/albums/

4.集成微信SDK

因为笔者这里使用CocoaPods自动集成,所以下面重点描写这个。手动集成可以看参考资料处林大佬的文章

  1. 在mac安装cocoapods
    终端-》输入sudo gem install cocoapods——》验证安装,输入pod --version,出现版本号即可
    检查cocapod的版本号

  2. 在unity中导入External Dependency Manager for Unity(在参考资料中可见)

  3. 根据官方教程,新建个xml放在Editor文件夹,名称为”xxxxxxxxxDependencies.xml“,xx表示任意

  4. xml内容

<dependencies>
 <iosPods>
    <iosPod name="WechatOpenSDK-XCFramework"  bitcodeEnabled="true" >  iosPod>
  iosPods>
dependencies>
  1. 打包,然后丢到MAC上
  2. 打开终端,输入cd <刚刚你拉上来的包的路径> (快速复制路径:点中包,键盘按下command+c,也就是win+c即可);然后输入pod install;然后用后缀为.xcworkspace 的文件打开工程
  3. 看到下面图片说明成功下载
    Unity iOS 集成微信登录(cocoapod集成方式)_第2张图片
  4. 添加“URL scheme
    在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id——类似wx22c22ec2222b2222
    这里笔者也使用了脚本的方式自动添加:
 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);
    }

  1. 在 “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版本有关
Unity iOS 集成微信登录(cocoapod集成方式)_第3张图片

5.微信登录代码、unity回调

这部分可以参考林大佬的文章,笔者这里就不赘述了。不过需要注意objective-c需要在xcode上运行,否则报错,所以Windows开发需要对import的oc插件加上条件编译:非编辑器。

补充

后续补充一下如何将做好的苹果包发布到testflight上,先埋个坑哈哈。

总结与反思

上述就是大致流程,可惜使用cocoapod集成的方式有个问题:每次打包都需要重新执行pod install;而且不知道为什么,笔者每次都需要勾选pods-unityframework的bitcode=yes;这部分目前都是手动的方式属实麻烦,还在寻找自动化的方式添加,也欢迎各位朋友评论!
Unity iOS 集成微信登录(cocoapod集成方式)_第4张图片

参考资料

  • 微信官方关于集成微信SDK到ios
  • Unity&IOS接入微信SDK,Universal Links的配置(基于Unity5.6.6f)
  • unity编辑器脚本-自动添加能力
  • 工具Landrop(Windows和MAC之间文件传输)Windows下载链接,mac在app store下载
  • 林新发大佬的微信SDK集成到IOS文章
  • 谷歌的开源unity包《External Dependency Manager for Unity》
  • 《External Dependency Manager for Unity》包的XML设置教程
  • oc代码报错EntryPointNotFoundException: UnityWeChatInit assembly: type: member:(null)讲解

你可能感兴趣的:(C#,心得,杂谈,unity,ios,微信)