Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)

Unity 接入Firebase第三方登录(Apple、Facebook、Google) 阅读详情

       最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功后,就可以获取到对应的AppKey和App Secret,这两个东西稍后需要用到。
准备工作
打开Unity,创建一个空项目,然后把我们刚刚下载的Share SDK导入。然后在Project下就会出现Plugins文件,然后选择一个物体,点击AddComponent添加Share SDK脚本,然后将Mob官网上申请的应用的App Key及AppSecret替换组建上原有的数据。然后搭建一个简单的UI,用来实现登录及分享功能。因为要发布到移动端测试,所以我做了一个假的控制台用来输出信息,
1、首先先说最简单的QQ分享及第三方登录
进行QQ第三方登录时,需要先到QQ互联官网上申请一个自己的应用,如果只是为了测试功能,也可以不申请,直接使用Mob默认的Appid及AppSecret。接下来就是写代码了,很简单。新建一个用来测试的脚本,我这里叫Login,先在Start中获取到对应的按钮引用,QQ登录的代码如下。

/// <summary>
        /// 退出按钮
        /// </summary>
        private Button exitBtn;
        /// <summary>
        /// QQ按钮
        /// </summary>
        private Button QQBtn;
        /// <summary>
        /// 微信按钮
        /// </summary>
        private Button weixinBtn;
        /// <summary>
        /// 微博按钮
        /// </summary>
        private Button weiboBtn;
        /// <summary>
        /// 分享按钮
        /// </summary>
        private Button ShareBtn;
        /// <summary>
        /// 用户名输入框
        /// </summary>
        private InputField userName;
        /// <summary>
        /// 密码输入框
        /// </summary>
        private InputField passWord;
        /// <summary>
        /// SDK
        /// </summary>
        public ShareSDK ssdk;
        /// <summary>
        /// 控制台
        /// </summary>
        public Text text;
        /// <summary>
        /// 获取到的用户信息保存本地的文件名
        /// </summary>
        private string fileName;
        /// <summary>
        /// 获取到用户的头像保存到本地的文件名
        /// </summary>
        private string iconName;
        /// <summary>
        /// 可以分享的平台
        /// </summary>
        private PlatformType[] platforms;

public  void Start()
        {
            Debug.Log(ssdk);
            platforms = new PlatformType[] { PlatformType.WeChat,PlatformType.WeChatFavorites,PlatformType.WeChatMoments,PlatformType.WechatPlatform,
            PlatformType.QQ,PlatformType.QZone,PlatformType.SinaWeibo};
            userName = transform.Find("UserName").GetComponentInChildren<InputField>();
            passWord = transform.Find("PassWord").GetComponentInChildren<InputField>();
            exitBtn = transform.Find("ExitBtn").GetComponent<Button>();
            QQBtn = transform.Find("QQBtn").GetComponent<Button>();
            weixinBtn = transform.Find("WeiXinBtn").GetComponent<Button>();
            weiboBtn = transform.Find("WeiBoBtn").GetComponent<Button>();
            ShareBtn = transform.Find("QQShareBtn").GetComponent<Button>();

            exitBtn.onClick.AddListener(ExitButtonHandle);
            QQBtn.onClick.AddListener(QQButtonHandle);
            weixinBtn.onClick.AddListener(WeiXinButtonHandle);
            weiboBtn.onClick.AddListener(WeiBoButtonHandle);
            ShareBtn.onClick.AddListener(ShareButtonHandle);
        }
/// <summary>
        /// QQ登录
        /// </summary>
        private void QQButtonHandle()
        {
            Debug.Log("点击了QQ登录");
            fileName = "/qq.json";
            iconName = "/qqIcon.jpg";
            if (File.Exists(Application.persistentDataPath + fileName))
                return;
            //注册登录回调事件
            ssdk.authHandler = AuthHandler;
            //确定向哪个平台进行第三方验证
            ssdk.Authorize(PlatformType.QQ);
        }
/// <summary>
        /// 登录回调
        /// </summary>
        /// <param name="reqID"></param>
        /// <param name="state"></param>
        /// <param name="type"></param>
        /// <param name="data"></param>
        private void AuthHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
        {
            Debug.Log("回调函数");
            if (state == ResponseState.Success)
            {
                JsonData userData = JsonMapper.ToObject(JsonMapper.ToJson(data));
                SaveUserInfo(JsonMapper.ToJson(data));
                string icon = userData["icon"].ToString();
                StartCoroutine(DownUserIcon(icon));
                text.text += "\n userid : " + userData["userID"] + "\n username : " + userData["nickname"] + "\n icon : " + userData["icon"];
                text.text += "\n授权成功!!!";
                userName.text = userData["nickname"].ToString();

            }
            else if (state == ResponseState.Fail)
            {
                text.text += "\n授权失败!!!";
            }
        }
/// <summary>
        /// 分享
        /// </summary>
        private void ShareButtonHandle()
        {
            //分享的内容
            ShareContent content = new ShareContent();
            if (iconName != null)
                content.SetImagePath(Application.persistentDataPath + iconName);
            content.SetTitle(" 分享 ");
            content.SetTitleUrl("https://www.baidu.com/");
            content.SetText(" wecome ");
            content.SetSite("Mob-ShareSDK");
            content.SetSiteUrl("https://www.baidu.com/");
            content.SetUrl("https://www.baidu.com/");
            content.SetComment("test description");
            content.SetMusicUrl("http://fjdx.sc.chinaz.com/Files/DownLoad/sound1/201807/10300.mp3");
            content.SetShareType(ContentType.Webpage);

            Debug.Log(" ******* 001 ");
            //注册分享回调事件
            ssdk.shareHandler = ShareHandler;
            //传递需要分享的平台及分享内容
            ssdk.ShowPlatformList(platforms, content, 0, 0);
        }
/// <summary>
        /// 分享回调
        /// </summary>
        /// <param name="reqID"></param>
        /// <param name="state"></param>
        /// <param name="type"></param>
        /// <param name="data"></param>
        private void ShareHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
        {
            if (state == ResponseState.Success)
            {
                Debug.Log(" share is success ");
                Debug.Log(JsonMapper.ToJson(data));
            }
            else if(state==ResponseState.Fail)
            {
                Debug.Log(" share is fail ");
            }
        }
/// <summary>
        /// 将用户的头像下载
        /// </summary>
        /// <param name="icon"></param>
        /// <returns></returns>
        private IEnumerator DownUserIcon(string icon)
        {
            Debug.Log("开启协程进行资源下载");
            WWW www = new WWW(icon);
            yield return www;
            FileStream stream = File.Create(Application.persistentDataPath + iconName);
            Texture2D texture = new Texture2D(www.texture.width, www.texture.height);
            www.LoadImageIntoTexture(texture);
            byte[] bytes = texture.EncodeToJPG();
            stream.Write(bytes, 0, bytes.Length);
            stream.Close();
            stream.Dispose();
        }
        /// <summary>
        /// 将得到的用户信息保存
        /// </summary>
        /// <param name="jsonFile"></param>
        private void SaveUserInfo(string jsonFile)
        {
            if (File.Exists(Application.persistentDataPath + "/" + fileName))
                File.Delete(Application.persistentDataPath + "/" + fileName);
            File.WriteAllText(Application.persistentDataPath + "/"+fileName, jsonFile);
        }

      在分享的方法中后面的两个参数

ssdk.ShowPlatformList(platforms, content, 0, 0);

       如果去看源码的话,就会发现没有什么用的,所以传什么数字都可以,实现上诉代码后,就可以进行测试了,第三方登录可以成功,且分享内容也没问题了。

2、微信第三方登录及分享

       进行微信第三方登录及分享时,需要先到微信开放平台申请属于自己的应用,等待审核通过后,将获取到的Appid及App secret填入Share SDK对应的微信平台的配置信息处,不过前提是你必须是要在微信开放平台的开发者信息提交并且审核通过了,因为直接创建出来的应用没有第三方登录权限,还需要申请开通,而申请开通的话就需要开发者资格认证,这些都弄好之后,得到的appid及App Secret才可以使用,不过分享是都可以的。还需要自己打一个属于自己的jar包,利用eclipse打开前面从Mob官网上下载的sdk包下的Android_Jave_Demo文件。

      在eclipse中打开后,然后将cn.sharesdk.demo.apshare、cn.sharesdk.demo.wxapi、cn.sharesdk.demo.yxapi这三个包的包名改成自己包名,然后在src单击右键,选择导出,命名为DemoCallback.jar。

    导出成功后,将Unity工程目录下的Plugins/Android/ShareSDK/libs下的Demo Callback替换为刚刚自己导出的jar。

      接下来则是对微信登录及分享进行事件注册,代码和QQ的基本一样。分享和QQ采用的是同一个方法,就不重复写了

/// <summary>
        /// 微信登录
        /// </summary>
        private void WeiXinButtonHandle()
        {
            Debug.Log("点击了微信登录");
            fileName = "/wechat.json";
            iconName = "/wechatIcon.jpg";
            if (File.Exists(Application.persistentDataPath + fileName))
                return;
            ssdk.authHandler = AuthHandler;
            ssdk.Authorize(PlatformType.WeChat);
        }

微信分享及登录功能到此就结束了。

3、微博的登录及分享

      微博跟微信是一样的,也需要到微博的开发者平台先进行注册及应用的申请,获取到应用的App ID及AppSecret,然后将其填写到微博对应的配置信息位置。微博登录代码如下,微博的分享功能也是直接和QQ的一样的,所以使用了同一个方法。微博登录可以只创建一个测试应用,然后不需要去申请审核,直接给这个应用添加测试账号,不过最多只能添加15个,不过如果只是测试的话,这些是够了的。然后就可以直接将得到的应用的App ID及AppSecret填入到对应位置即可。

/// <summary>
        /// 微博登录
        /// </summary>
        private void WeiBoButtonHandle()
        {
            Debug.Log("点击了微博登录");
            fileName = "/sina.json";
            iconName = "/sinaIcon.jpg";
            if (File.Exists(Application.persistentDataPath + fileName))
                return;
            ssdk.authHandler = AuthHandler;
            ssdk.Authorize(PlatformType.SinaWeibo);
        }

       到此为止,微博登录并没有实现,你会发现在登录的时候会出现21322错误,微博提示为重定向错误,这个是真的有点坑的,因为Mob官方的文档也没有做出提示。通过查找微博开放平台文档才明白了,我们需要到微博的后台管理平台,找到自己申请的应用,点击设置,进入到应用信息中的高级信息,在OAuth2.0授权设置中设置一个回调的网站,然后确定后即可,接下来是到Unity中在ShareSDK中的微博配置信息设置处的Redirect Url将刚刚设置的网站设置过来,这三个必须保持一致。

      

      至此利用Mob实现Unity第三方登录就结束了,如果需要源码的可以到我的Git上获取。

由于都是自己在摸索,所以难免会很多的不足及错误,如文中有BUG或者错误的地方,还望大神指出,在此写谢过了!

Unity微信Android端第三方登陆 微信开发者账号:注册App应用,从这儿获取包名、AppID和App Secret。 阅读详情

相关推荐

Unity接入ShareSDK实现分享QQ、微信等社会化软件

一、下载SDK:https://github.com/MobClub/New-Unity-For-ShareSDK 二、将ShareSDK.unitypackage导入Unity 三、将ShareSDK和MobSDK脚本挂载到场景的GameObject上面 四、在MobTech官网申请一个应用,需要用到该应用的App Key和App Secret,用在MobTech官网申请的App Key和...

weixin_40116412的博客 712

unity3D中对于切换场景利用单例模式实现数据共享

最近在做切换场景的一款游戏时遇到了一个问题,场景和场景之间我需要相互传递并处理数据,于是就想到了单例,单例模式的共同优点就是只实例一次,节省内存。今天我想以个人理解总结一下单例模式。我一共列举了三种模式: 一、我在unity里面添加了一个物体,添加脚本来测试三个模式,测试脚本如下: public class Test : MonoBehaviour { void Update() ...

cgExplorer的博客 3402

Unity使用官方sdk实现微信、QQ、微博三方登录(Android)

对于一个不懂安卓不会java的新手程序,实现安卓三方登录开始是 一头雾水,不知道从哪下手,通过自己摸索加上多方求助终于完成了。为了自己巩固一下以及一些像我一样的新手走弯路,把详细过程记录下来。 第一次写文章,写的有点乱,希望能帮助到大家。 我使用的是android studio2.2.2版本开发。 一、新建安卓工程并导入jar文件 注意写好自己的包名,微信登录和微博登录都要用到包名

yangxuan00的博客 2万+

【Unity】中实现微信、QQ、微博帐号登录(Android环境)(官方SDK)

对于一些没有过安卓开发经验的开发者来说,为了实现安卓第三方登陆肯定是费尽了脑汁,不知道从何着手解决,为了让开发者少走弯路,下面就给大家介绍下Unity中使用官方SDK实现微信、QQ、微博帐号登录的方法,一起来看看吧。 一、新建安卓工程并导入jar文件   注意写好自己的包名,微信登录和微博登录都要用到包名获取签名,把获取到的签名上传到开放平台。   填好包名后一直点next就可以了,点击fi

天生爱赞美的博客 7350

Unity中使用ShareSDK微信登录的问题

说到APP中使用社会化分享无非就是网上流行的SDK,比如shareSDK、友盟等等。由于项目之前就使用shareSDK的缘故,所以新的Unity工程也使用的是shareSDK。然而我们在使用过程中发现唯独微信登录死活登录不了,登录的界面可以出来但是登录的回调却不执行!好吧,那就看shareSDK的文档吧,文档地址在这http://wiki.mob.com/unity3d%E5%BF%AB%E9%80

Yong Ledo的博客 1万+

游戏大厂SDK接入全流程大白话指南——附详细案例

《游戏大厂SDK接入全流程指南》摘要: 本文系统讲解游戏SDK接入全流程,涵盖基础概念、功能模块、技术对接与项目管理要点。核心内容包括:SDK的定义与必要性(合规登录、支付等必备功能)、主流模块解析(登录/支付/实名等)、完整12步接入流程(从商务对接到上线运营)。重点技术环节涉及Unity/原生环境配置、各模块API集成、权限与合规处理,并以腾讯SDK为例演示实操步骤。同时提供联调测试方法、常见避坑指南及项目管理建议,帮助开发团队高效完成SDK接入,确保游戏合规上线。全文采用白话讲解,兼顾技术深度与实操性

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1692

unity工程包怎么上传git_Unity 多平台原生SDK接入速览(二):QQ互联

ZeroyiQ:Unity 多平台原生SDK接入速览(一):微信开放平台ZeroyiQ:Unity 多平台原生SDK接入速览(三):FacebookZeroyiQ:Unity 多平台原生SDK接入速览(四):TwitterZeroyiQ:Unity 多平台原生SDK接入速览(五):微博一、前言QQ互联,当前(2020-6-29)支持个人开发者认证和企业认证。创建应用,等待审核后获取 AppID 和...

weixin_39930671的博客 133

Unity3d使用ShareSDK做分享和第三方登录功能Demo

代码注释很详细,Unity3d使用ShareSDK做分享和第三方登录功能Demo

Unity使用shareSDK做微信登录时无法实现的解决办法

在缠着MOB的客服哥哥的几个小时,终于解决了微信登录的问题! 之前一直在用shareSDK的Demo 来测试第三方登录、分享,结果微博QQ都没问题,但微信就是不行,反反复复地看了很多次文档、以及一些论坛讨论,还是怎么改都不行 于是跑去烦了很久的客服,现在问题都解决了! 首先,当然是按照shareSDK官方的集成文档来正确操作设置 然后就是一些要注意的事项了,以官方提

mrzhengttl的博客 4917

unity的ShareSDK第三方账号登录

接入ShareSDK实现第三方登录 

unity3d的第三方登陆

已第三方登陆为例子,实现了unity3d和Android的通信。

sdk开发包怎么使用_Unity 多平台原生SDK接入速览(三):Facebook

ZeroyiQ:Unity 多平台原生SDK接入速览(一):微信开放平台ZeroyiQ:Unity 多平台原生SDK接入速览(二):QQ互联ZeroyiQ:Unity 多平台原生SDK接入速览(四):TwitterZeroyiQ:Unity 多平台原生SDK接入速览(五):微博一、前言由于该系列为了能适应更多的引擎,因此主要还是选择了对于原生SDK的研究。这里接入的就是 Facebook-Andr...

weixin_39934257的博客 417

Python读取三菱PLC数据

3、支持自定义的数据读写操作。直接调用Read方法,可以读取到原生的byte数组,然后进行组合数据。1、每次的数据交互您都可以判断是否成功,如果您不判断,如果网络断开或是异常,会影响程序的执行。Qna3E协议的ascii类 MelsecMcAsciiNet。A兼容1E协议的二进制类 MelsecA1ENet。Qna3E协议的二进制类 MelsecMcNet。2、读写操作支持单个数和数组。

weixin_46744807的博客 1998

关于unity3d使用sharesdk分享到微信的填坑实践2017

科目,sharesdk分享实践 内容,使用sharesdk对unity3d中的Android应用进行分享 目的,学会分享到微信、微博、qq的使用方法

gameboy_ai的专栏 920

RV1126 ISP开发实战:从Tuner调试到IQ文件解析

本文详细介绍了RV1126 ISP开发的完整流程,从Tuner调试到IQ文件解析,涵盖了环境搭建、工具使用、参数配置及性能优化等关键环节。通过实战案例和避坑指南,帮助开发者快速掌握Rockchip芯片的ISP开发技巧,提升图像处理质量。

weixin_29195615的博客 571

达梦慢sql和统计信息收集

各计划节点的执行顺序为:缩进越多的越先执行,同样缩进的上面的先执行,下面的后执行,上下的优先级高于内外。在建立索引的时候,要考虑索引的最左匹配原则(在使用 SQL 语句时,如果 where 部分的条件不符合最左匹配原则,可能导致索引失效,或者不能完全发挥建立的索引的功效);执行计划是 SQL 语句的执行方式,由查询优化器为语句设计的执行方式,交给执行器去执行。生产系统中,对于频繁变动的数据表,多次执行计划可能会出现不一致的问题,这往往是由于统计信息不准导致的,索引定期收集统计信息就很有必要了。

m0_37680131的博客 1714

unity3d和Android的相互通信

游戏中加入第三方登陆的功能,虽然腾讯提供了有关unity3d的sdk,但是对于微博的没有集成,而且开发文档看起来头痛,于是自己写个第三方jar包,集成到unity3d中。首先,到腾讯开发平台(http://open.qq.com/)、微信开放平台(https://open.weixin.qq.com/)、注册开发者账号,微博开放平台(http://open.weibo.com/)都注册开发者账号,

qq_22780533的博客 1158

LTspice 导入 PSpice 模型实战指南 --(解决语法兼容性与模型优化问题)

本文提供了将PSpice模型成功导入LTspice的详细实战指南。针对两者间的语法兼容性问题,文章以TI UCC23513为例,逐步讲解模型获取、符号创建、常见语法错误修改及仿真验证方法,并分享了模型优化与个人库管理技巧,帮助用户高效解决模型导入与仿真难题。

weixin_28278377的博客 820

Unity安卓平台接入ShareSDK使用新浪功能和接入SMSSDK 测试[一]

体验一波使用ShareSDK,其实官方也有教程,只是没有那么详细,这里记录下过程中的一些细节 选择新浪是因为新浪最适合开发阶段测试,微信的需要交钱而且需要打包之后才能测试,QQ的也没那么容易接 ShareSDK配置部分 到官网注册成为Mob的开发者 到Mob开发者平台创建应用 创建的应用要选择接入的Mob产品,选择ShareSDk 在开发者后台的应用管理界面的左边栏选择ShareSDK,右边上...

weixin_43149049的博客 499

RFSOC实战解析:MTS多片同步的时序校准与相位相干实现

本文深入解析了在RFSOC平台上实现MTS多片同步的关键技术与实战流程。文章从相位相干的重要性出发,详细阐述了SYSREF与SYNC信号的协同工作机制,并提供了从硬件时钟配置到软件API调用的完整MTS实现步骤。重点探讨了时序校准的核心方法,旨在帮助工程师解决多通道系统相位不一致的难题,确保ADC与DAC达到精确的相位相干,从而构建高性能的MIMO和相控阵系统。

weixin_29206669的博客 192

《Claude Code 实战》第 1 章:开启智能编程新纪元——初识 Claude Code

简单来说,Claude Code 是 Anthropic 公司推出的一款基于 Claude 3.7 Sonnet 等大语言模型的强大编程工具。但与传统的 ChatGPT 或普通的聊天机器人不同,Claude Code 具备了"动手"的能力。它不仅会"说",更会"做"。想象一下,你不再需要描述复杂的命令行参数,也不需要为了修改一个配置文件而频繁切换编辑器。Claude Code 可以直接读取你项目中的文件、理解复杂的代码库结构、执行终端命令,并直接为你生成或修改代码。

AI天才研究院 244

ShakeSDK集成说明

ShakeSDK集成说明 功能: ShakeSDK是用于实现第三方(如微信、微博、QQ等)平台的授权登陆、分享功能的插件。 官网:http://www.mob.com/ 官方集成文档:http://wiki.mob.com/unity3d%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97/ 框架内提供: 1、框架内提供了两个版本的Sh...

qq_42553673的博客 484

uniapp - 解决苹果ios真机运行报错:错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配(HbuilderX运行IOS手机出现问题,uniapp运行到IOS真机提示请查看是否设备未)

uni-app,ios苹果,App平台端,uniapp运行到IOS真机提示错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UUID在哪里,uniApp运行到ios真机报错解决,安装自定义基座App失败,没找到有计划资源,证书、标识符和描述文件,证书标识符和描述文件下面没有选项怎么回事,HBuilder真机调试报错请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UniApp运行到IOS真机提示,授权的设备才可以直接安装基座,添加调试的IOS设备,在Devices中,添加手机设备UUID

🏆 前端领域优质创作者 1万+

Android应用开发-小巫优快云博客客户端之集成友盟社会化分享组件

Android应用开发-小巫优快云博客客户端之集成友盟社会化分享组件

gfjggtf的博客 168

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Unity特殊文件路径
下一篇: Unity利用SMSSDK实现短信验证码(附源代码)
慕飞
博客等级 码龄11年 43粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值