unity windows打包ios_Unity接入第三方iOS SDK——之微信开放平台

废言

这算是Unity接入微信开放平台的第二篇了,第一篇在这:Unity接入第三方Android SDK——之微信开放平台。 作为一个既没有接触过Android开发、有没有接触过iOS开发的人员 ,完成Android和iOS的微信SDK接入,拢共花费了一周的工作时间,效率有点低。

在完成微信SDK接入的过程中,查看过网络上不少的文章,不过似乎没有哪一篇是能文章能够一气呵成解决问题的,因此自己有了斗胆一试的想法,所以才有了这两篇文章的诞生,希望能够后面接触的小伙伴节约一些时间。

本文的亮点

最后的完成品,不需要在Xcode中修改、添加任何内容,直接Unity编译到Xcode然后安装到真机

一、开始 Universal Links的配置

这部分的内容我就不细讲了,相对比较简单,主要是苹果开发者和微信开发者后台的设置,然后把apple-app-site-association这个文件放到域名根目录即可(域名必须支持HTTPS) apple-app-site-association 这个文件的内容类似下面这样:

{
    

二、微信SDK的导入

  1. 前往微信开放平台下载SDK:https://developers.weixin.qq.com/doc/oplatform/Downloads/iOS_Resource.html
  2. SDK包含4个文件: libWeChatSDK.a,WXApi.h,WXApiObject.h, WechatAuthSDK.h
  3. 将这四个文件放入Unity项目的 Assets/Plugins/iOS 目录下,这个目录下的文件会自动打包至Xcode项目的Libraries目录下。
  4. 在Unity的Inspector中设置libWeChatSDK.a,勾选 Framework dependencies/Security 和 Rarely used frameworks/Webkit,如下图:

v2-7c5c237977c4dd384318405c62ebe35f_b.jpg

v2-971a80287d21d9e87aad5a7d5c0ea028_b.jpg

设置完之后记得点 Apply 。

三、扩展UnityAppController

扩展UnityAppController的目的很简单,这样就不需要每次导出Xcode项目之后,都去修改UnityAppController.mm中的代码。 这个我主要参考了这篇博文:https://blog.mutoo.im/2015/09/make-subclass-from-unityappcontroller/ 但是最终我用的代码版本 ,是在他的基础上去掉了一部分。 创建MyAppController.m文件 ,代码如下:

//
//  MyAppController.m
//  Unity-iPhone
//
//  Created by Jooki Tsui on 2020/11/13.
//

#import "WXApi.h"
#import "UnityAppController.h"

@interface MyAppController : UnityAppController<WXApiDelegate>
@end

IMPL_APP_CONTROLLER_SUBCLASS (MyAppController)

@implementation MyAppController

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
#if defined(__IPHONE_12_0) || defined(__TVOS_12_0)
    restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring> > * _Nullable restorableObjects))restorationHandler
#else
    restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
#endif
{
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

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

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

- (void)onResp:(BaseResp *)resp
{
    // do something
}

- (void)onReq:(BaseReq *)req
{
    // do something
}

@end

具体代码我就不一句句解释了,主要是重写了continueUserActivity、openURL、handleOpenURL这三个方法。 同样将这个文件放入 Assets/Plugins/iOS 目录下。

四、编写Unity和Objective-C的桥接文件

创建NativeBridge.m文件,写入供Unity调用的方法,代码如下:

//
//  NativeBridge.m
//  Unity-iPhone
//

#import <Foundation/Foundation.h>
#import "WXApi.h"

//这是向微信终端注册你的appid
void RegisterApp(const char* appid)
{
    NSString *weichatId = [NSString stringWithFormat:@"%s", appid];

    BOOL installed = [WXApi isWXAppInstalled];
    NSLog(@"installed result: %@", installed?@"true":@"false");

    BOOL result = [WXApi registerApp:weichatId universalLink:(@"https://www.mylittleenglish.com/app/hanzi/")];

    NSLog(@"result: %@", result?@"true":@"false");
}


// 分享链接至微信
void ShareUrlToWX(int scene, const char* url, const char* title, const char* description){
    WXWebpageObject *webpageObject = [WXWebpageObject object];
    webpageObject.webpageUrl = [NSString stringWithUTF8String:url];
    WXMediaMessage *message = [WXMediaMessage message];
    message.title = [NSString stringWithUTF8String:title];
    message.description = [NSString stringWithUTF8String:description];
    // 用APP的Icon做缩略图
    NSDictionary *infoPlist = [[NSBundle mainBundle] infoDictionary];
    NSString *icon = [[infoPlist valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"] lastObject];
    [message setThumbImage:[UIImage imageNamed:icon]];
    message.mediaObject = webpageObject;
    SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
    req.bText = NO;
    req.message = message;
    req.scene = scene;
    [WXApi sendReq:req completion:nil];
}


//判断是否安装微信
bool IsWechatInstalled_iOS()
{
    return [WXApi isWXAppInstalled];
}

我这里实现了向微信注册APP、判断是否安装了微信App、分享链接至微信三个方法。要实现分享更多的媒体消息,比如图片、小程序等,请查看微信官方文档:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Share_and_Favorites/iOS.html 写好之后同样将这个文件放入 Assets/Plugins/iOS 目录下。

五、在Unity中调用NativeBridge.m中的方法

public 

之后就可以再Unity任意脚本中在合适的时机调用WeChatController.Instance.Init()、WeChatController.Instance.IsWeChatAppInstalled()、WeChatController.Instance.ShareWebpageToWX()这些方法。

至此所有的逻辑部分都完成了,接下来就剩下在Xcode中对相关项进行设置了,但是我们不打算手动设置,而是通过代码自动设置,实现打包全程自动化,不需要人工参与设置参数或者修改代码。

六、自动完成Xcode项目的各项设置

主要是通过PostProcessBuild来实现。 在Unity项目的 Assets/Editor 目录下新建一个文件,比如XCodePostProcessBuild.cs 这个文件的目的就是自动设置Xcode项目的相关选项,具体每句代码设置的是什么内容,代码都有注释:

using 

注意,这个文件是放在Assets/Editor目录下。

七、小结

以上就是所有流程了,应该还是比较完整的,可能代码贴的多了点,不过这篇文章对照微信开发文档来看的话,应该还是很清晰易懂的:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

最后,觉得不错的话记得点个赞呀! 原文链接:https://www.yuque.com/jooki/hcm4it/vfn3uk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值