Unity IOS 微信SDK 记录

前期准备 微信申请的账号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];

        // 多媒体数据对象,可以为WXImageObjectWXMusicObjectWXVideoObjectWXWebpageObject等。

        

        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这边取用户信息的没贴了,有需要的回复,我再来补吧。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值