前期准备 微信申请的账号ID
#define WeiXinID @“XXXXXXXXXXX”
#define WeiXinSecret @“XXXXXXXXXXXXXXXXX”
1 .
微信sdk三个文件(WXApiObject.h,WXApi.h,libWeChatSDK.a)放在Libraries下面,然后再导入.
UnityAppController.h
添加头文件
#import <Libraries/Plugins/iOS/UnitySDKExport/WXApi.h>
添加响应WXApiDelegate到
@interface UnityAppController : NSObject<UIApplicationDelegate,WXApiDelegate>
2.
UnityAppController.mm
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
方法中添加微信启动
[WXApi registerApp:WeiXinID];
3.
//重写微信方法(必要步骤)
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [WXApi handleOpenURL:url delegate:self];
}
//重写微信方法(必要步骤)
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
return [WXApi handleOpenURL:url delegate:self];
}
bool isfengxiang = false; //这个是操作记录,设置一下你是登录操作,还是分享操作,根据这个分发不同的消息到U3D那边
//用户操作微信反馈
-(void) onResp:(BaseResp *)resp{
if (resp.errCode==0)
{
if (!isfengxiang) //微信登录回复
{
NSLog(@"微信登录返回成功!");
// 返回成功,获取Code
SendAuthResp *sendResp = resp;
NSString *code = sendResp.code;
NSLog(@"code=%@",sendResp.code);
//反馈给U3D那边
//由于本人是IOS小白,不太方便在这边做过多的代码编写,所以简洁为主。拿到必备的code,剩下的拿到自己擅长的U3D C# 那边去处理
UnitySendMessage("GameManager", "WXShouQuanIOS",[sendResp.code UTF8String]); //第一个参数同时模型名称 2 该模型挂的脚本方法名称 3参数
}else
{
//所有分享成功都走这里,你要是有其他的操作需求,要做区分,比如朋友,朋友圈,分享图片,音乐。
NSLog(@"微信分享返回成功!");
UnitySendMessage("GameManager", "WXFengXiangIos","0"); //第一个参数同时模型名称 2 该模型挂的脚本方法名称 3参数
//传个“0” U3D那边只判断 等于”0”就成功。其他的全失败...
}
}else{
NSLog(@"微信登录失败! %d",resp.errCode);
}
/*
enum WXErrCode {
WXSuccess = 0, 成功
WXErrCodeCommon = -1, 普通错误类型
WXErrCodeUserCancel = -2, 用户点击取消并返回
WXErrCodeSentFail = -3, 发送失败
WXErrCodeAuthDeny = -4, 授权失败
WXErrCodeUnsupport = -5, 微信不支持
};
*/
}
//U3D调用的 登录请求,你们最好加一下是否安装微信的操作。
extern "C"{
void WeiXinLoginByIos(){
//构造SendAuthReq结构体
SendAuthReq* req =[[SendAuthReq alloc] init ];
req.scope = @"snsapi_userinfo" ;
req.state = @"123" ;
isfengxiang = false;
//第三方向微信终端发送一个SendAuthReq消息结构
[WXApi sendReq:req];
}
void SdkFenXiangHaoYou(const char* name,const char* titl,const char* des){ //分享给好友 (名称多直白)
//创建发送对象实例
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
sendReq.scene = 0;//0 =好友列表 1 = 朋友圈 2 = 收藏 (自己改一下要用的类型)
isfengxiang = true;
//创建分享内容对象
WXMediaMessage *urlMessage = [WXMediaMessage message];
NSString *strNSString = [[NSString alloc] initWithUTF8String:titl];
NSString *strNSString1 = [[NSString alloc] initWithUTF8String:des];
NSString *strNSString2 = [[NSString alloc] initWithUTF8String:name];
urlMessage.title = strNSString;//分享标题
urlMessage.description = strNSString1;;//分享描述
//创建多媒体对象
WXWebpageObject *webObj = [WXWebpageObject object];
webObj.webpageUrl =strNSString2;//分享链接
//完成发送对象实例
urlMessage.mediaObject = webObj;
sendReq.message = urlMessage;
//发送分享信息
[WXApi sendReq:sendReq];
}
//微信分享图片(这个最烦,因为不会oc,语法都不懂。截屏的操作已经在U3D那边做好了,放在一个地址里面,传到xcode这边,
然后取这张图片分享出去,取图片这操作还是问朋友的,哎~安卓那边很好处理,Java还是会一点的)
void SdkImagerShare(const char* imgurl)
{
isfengxiang = true;
NSString *strNSString = [[NSString alloc] initWithUTF8String:imgurl];
NSString *imagePath = strNSString;
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
NSData *imageData = UIImageJPEGRepresentation(image, 0.45f);
UIImage *newImage = [UIImage imageWithData:imageData];
CGSize size = CGSizeMake(128, 72);
UIGraphicsBeginImageContext(size); //size 为CGSize类型,即你所需要的图片尺寸
[newImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 用于微信终端和第三方程序之间传递消息的多媒体消息内容
WXMediaMessage *message = [WXMediaMessage message];
// // 设置消息缩略图的方法
[message setThumbImage:scaledImage];
// 多媒体消息中包含的图片数据对象
WXImageObject *ext = [WXImageObject object];
ext.imageData = imageData;
message.mediaObject = ext;
// 图片真实数据内容
// imageObject.imageData = [NSData dataWithContentsOfFile:filePath];
// 多媒体数据对象,可以为WXImageObject,WXMusicObject,WXVideoObject,WXWebpageObject等。
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = 0;// 分享到朋友
[WXApi sendReq:req];
}
}
//至此xcode代码的部分就结束了
4. 回到U3D
导入头文件
using System.Runtime.InteropServices;
//标记 这个就不多说了,直接传参数就好了
[DllImport ("__Internal")]
private static extern void WeiXinLoginByIos ();
[DllImport ("__Internal")]
private static extern void SdkFenXiangHaoYou (string str1,string str2,string str3);
[DllImport ("__Internal")]
private static extern void SdkImagerShare (string str1);
//贴一下截屏存地址的方法
/// <summary>
/// 截屏分享.
/// </summary>
/// <returns>The screen.</returns>
public IEnumerator CaptureScreen()
{
yield return new WaitForEndOfFrame();
//分辨率自己设置想要的
int width = 1280;
int height = 720;
Texture2D tex = new Texture2D(width,height,TextureFormat.RGB24,false);
tex.ReadPixels(new Rect(0,0,width,height),0,0,true);
byte[] imagebytes = tex.EncodeToPNG();//转化为png图
tex.Compress(false);//对屏幕缓存进行压缩
string pathstr = Application.persistentDataPath + "/screencapture.png";
if (File.Exists(pathstr))
{
File.Delete(pathstr); //每次都删除上一张,避免那啥
}
File.WriteAllBytes(Application.persistentDataPath + "/screencapture.png",imagebytes);//存储png图
if (Application.platform == RuntimePlatform.Android) { //我这边就简单粗暴了,直接判断运行时的
SDKManager. _CallSdkApi("SdkImageShare", pathstr);
} else {//ios
SDKManager._SdkImagerShare(pathstr);
}
}
5 总的代码部分就结束了。
xcode一些设置 一些包的导入就不写了,看官网的就好。
设置一下微信白名单info-> LSApplicationQueriesSchemes :weixin
info->URL Types 新增一个
URL Schemes : wx0843b95eabxxxxxx
就是你微信申请到的ID
没写过这玩意,没啥排版,主要是方便以后自己看。
还有code拿到之后到U3D这边取用户信息的没贴了,有需要的回复,我再来补吧。