Unity-iOS接入微信SDK-微信登录
Unity-iOS接入微信SDK-微信登录
前言
默认熟悉Unity 和 Xcode 开发工具的基本使用方法,并且具有一定的编程知识基础.
Unity版本:unity 2018.1.7f1
Xcode版本:Xcode 10.0
下载微信SDK
微信SDK下载地址:微信开放平台.
导出Unity Xcode项目
导出Unity Xcode项目,并打开选择你的调试证书。
Xcode导入微信SDK
将微信SDK文件中包含的libWeChatSDK.a, WXApi.h, WXApiObject.h, WechatAuthSDK.h 这四个文件添加到你刚才打开的xcode工程中 (如下图所示,在Unity-iPhone工程目录下创建/wecaht)。
Xcode相关属性配置
1.微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。开发者需要在工程中链接上(这边有几个库跟微信官方平台上说的有点不一样,就是这三个libz.dylib, libsqlite3.0.dylib, libc++.dylib 在这里后缀都是tbd):
- SystemConfiguration.framework
- libz.tbd
- libsqlite3.0.tbd
- libc++.tbd
- Security.framework
- CoreTelephony.framework
- CFNetwork.framework
2.在你的工程文件中选择 Build Setting下的Linking项中"Other Linker Flags"中加入 “-Objc -all_load”
特别说明:如果你导出的Xcode项目中包含其他静态库而导致报错的话,需要将 -Objc -all_load 修改成 -Objc _force_load $(SRCROOT)/wechat/libWeChatSdk.a
3.在你的工程文件中选择Info下的URL Types 点击增加一个选项,然后在Identifier 填入包名,在URL Schemes 填入你在微信后台注册的appid。
温馨提示:认真看文档 这里URL Schemes 容易搞错,这里填的是在微信后台注册的appid。这里出错会出现跳转到维信后点击无反应。
添加一个新的项 LSApplicationQueriesSchemes 将类型修改为 Array , 并添加两个子项:wechat, weixin
脚本修改
在Libraries 下新建文件夹WXApiManager 在里面添加必要的代码 (位置个人喜好,后面引用需要用到自己注意就好了)
1.新建WXApiManager.h, 增加 WXApiDelegate协议
//
// WXApiManager.h
// Unity-iPhone
// bowenk
// Created by bowenk on 2018/9/27.
//
#import <Foundation/Foundation.h>
#import "wechat/WXApi.h"
NS_ASSUME_NONNULL_BEGIN
@interface WXApiManager : UIResponder<UIApplicationDelegate, WXApiDelegate>
+ (instancetype)shareManager;
@end
NS_ASSUME_NONNULL_END
2.新建WXApiManager.mm 重写接收微信回调信息
//
// WXApiManager.m
// Unity-iPhone
// bowenk
// Created by bowenk on 2018/9/27.
//
#import "WXApiManager.h"
@implementation WXApiManager
+(instancetype) shareManager
{
static dispatch_once_t onceToken;
static WXApiManager *instance;
dispatch_once(&onceToken, ^{
instance = [[WXApiManager alloc] init];
});
return instance;
}
-(void) onReq:(BaseReq *)req {}
-(void) onResp:(BaseResp *)resp
{
if([resp isKindOfClass:[SendAuthResp class]])
{
SendAuthResp *temp = (SendAuthResp*)resp;
int errorCode = temp.errCode;
switch (errorCode) {
case 0:
{
printf("登录成功-xcode");
UnitySendMessage("[_WechatHelper]", "LoginSuccess", [NSUTF8StringEncoding temp.code]);
break;
}
case -2:
printf("用户取消");
UnitySendMessage("[_WechatHelper]", "LoginFail", "用户取消");
break;
case -4:
printf("用户拒绝授权");
UnitySendMessage("[_WechatHelper]", "LoginFail", "用户拒绝授权");
break;
default:
printf("登录失败");
UnitySendMessage("[_WechatHelper]", "LoginFail", "登录失败");
break;
}
}
}
@end
3.新建接口文件 PluginSystem.m 这是Unity跟iOS的接口文件,Unity调用这些接口来操作的。
//
// PluginSystem.m
// Unity-iPhone
// bowenk
// Created by bowenk on 2018/9/27.
//
#import <Foundation/Foundation.h>
#import "wechat/WXApi.h"
//这是向微信终端注册你的appid
void _registerApp(char* appid)
{
NSString *weichatId = [NSString stringWithFormat:@"%s", appid];
[WXApi registerApp:weichatId];
}
//登录
void _wechatLogin(char* message)
{
SendAuthReq* req = [[SendAuthReq alloc] init];
req.scope = @"snsapi_userinfo";
req.state = [NSString stringWithFormat:@"%s", message];
[WXApi sendReq:req];
}
//判断是否安装微信
bool _isWechatInstalled()
{
return [WXApi isWXAppInstalled];
}
4.在Classes 目录下找到 UnityAppController.mm文件,导入刚才的微信SDK中的WXApi.h 和 WXApiManager.h
重写 handleOpenURL 和修改 openURL 方法
踩过的坑
1、所有方法都没问题了,点击登录也跳转到微信了,但是点击微信端的登录按钮没有一点反应,一度怀疑是不是注册的包名有问题,就是如图情况:
就是点击这个确认登录,死活没有反应,一点反馈也没有,也不会报错。
最后发现就是前面特别强调的URL Schemes填错了。这里在强调一遍URL Schemes 填的是在微信上注册的appid