Unity:使用ShareSDK插件接入QQ授权登录

Unity3D 使用ShareSDK对接QQ登录 Unity3D引擎插件,使用Mob公司的ShareSDK与Unity进行交互,达到在移动端可以使用多平台登录等。 给差评的牛逼哈,都没下载不知道怎么给的差评 立即下载

这里是以Android为例,IOS没试过,但应该差不多

1、进入Mob官网下载ShareSDK

官网网址:http://www.mob.com/

ShareSDK GitHub下载地址:https://github.com/MobClub/New-Unity-For-ShareSDK

2.将ShareSDK导入Unity

将下载好的ShareSDK压缩包解压,将里面的 Share_SDK.unitypackage 导入Unity中

导入Unity之后的目录结构如下:

一定要将工程的平台改为Android平台

3.挂载ShareSDK脚本

1、创建一个空物体(这里我将空物体命名为ShareSDK),将ShareSDK脚本挂载上去

注意:如果工程平台没有改为Android平台,挂载ShareSDK脚本后不会显示AppKey和AppSecret

4.到Mob官网注册一个账号

注册账号这个过程就不用多说了,注册完成后进入开发者平台,这里说一下开发者台怎么进入(因为官网和以前的不同了)

5.在开发者平台创建应用

添加应用的过程按照上面的提示填写就行了,完成之后会得到AppKey和App Secret,这两个很重要,在工程需要用到

5.接入SDK

将AppKey和AppSecret添加到上面挂载的ShareSDK脚本上,DevInfo中可以开启要接入的平台

接下来就是代码示例:

/// <summary>
/// 定义一个QQUser类,用来存储登录返回的用户信息
/// </summary>
public class QQUser
{
    /// <summary>
    /// 用户ID
    /// </summary>
    public string UserID { get; private set; }
    /// <summary>
    /// 用户名
    /// </summary>
    public string Username { get; private set; }
    /// <summary>
    /// 用户头像的url
    /// </summary>
    public string UserIconUrl { get; private set; }
    /// <summary>
    /// 用户记号
    /// </summary>
    public string Token { get; private set; }

    public QQUser(string userID, string username, string userIconUrl, string token)
    {
        this.UserID = userID;
        this.Username = username;
        this.UserIconUrl = userIconUrl;
        this.Token = token;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using cn.sharesdk.unity3d;
using LitJson;
using System;

// 挂载到ShareSDK物体上
public class QQTest : MonoBehaviour
{
    private ShareSDK shareSDK;
    private QQUser user;

    private void Awake()
    {
        // 获取ShareSDK
        shareSDK = GetComponent<ShareSDK>();
        // 设置回调
        shareSDK.authHandler = AuthHandler;

        // 添加事件监听
        EventCenter.AddListener(EventTypes.RequestAuth, OnRequestAuth);
        EventCenter.AddListener(EventTypes.CancelAuth, OnCancelAuth);
    }


    /// <summary>
    /// 请求授权
    /// </summary>
    /// <param name="data"></param>
    private void OnRequestAuth(object data)
    {
        shareSDK.Authorize(PlatformType.QQ);
    }

    /// <summary>
    /// 请求取消授权
    /// </summary>
    private void OnCancelAuth(object data)
    {
        shareSDK.CancelAuthorize(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)
    {
        switch (state)
        {
            case ResponseState.Begin:// 开始授权
                break;
            case ResponseState.Success:// 授权成功
                AuthSucess();
                break;
            case ResponseState.Fail:// 授权失败
                break;
            case ResponseState.Cancel:// 取消授权
                break;
            case ResponseState.BeginUPLoad:// 开始加载
                break;
            default:
                break;
        }
    }

    /// <summary>
    /// 授权成功
    /// </summary>
    private void AuthSucess()
    {
        // 获取到授权信息
        Hashtable info = shareSDK.GetAuthInfo(PlatformType.QQ);
        // 解析json
        JsonData data = JsonMapper.ToObject(MiniJSON.jsonEncode(info));
        string userID = data["userID"].ToString();
        string username = data["userName"].ToString();
        string userIconUrl = data["userIcon"].ToString();
        string token = data["token"].ToString();
        user = new QQUser(userID, username, userIconUrl, token);
        EventCenter.Broadcast(EventTypes.AuthSuccess, user);
    }

    private void OnDestroy()
    {
        // 移除事件监听
        EventCenter.RemoveListener(EventTypes.RequestAuth, OnRequestAuth);
    }
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// UI面板
/// </summary>
public class UIPanel : MonoBehaviour
{
    public Text msgText;
    public Image userIconImg;
    public Text usernameText;
    public Button loginBtn;
    public Button logoutBtn;

    private void Awake()
    {
        // 获取UI组件
        userIconImg = transform.Find("Img_UserIcon").GetComponent<Image>();
        msgText = transform.Find("Txt_Msg").GetComponent<Text>();
        usernameText = transform.Find("Txt_Username").GetComponent<Text>();
        loginBtn = transform.Find("Btn_Login").GetComponent<Button>();
        logoutBtn = transform.Find("Btn_Logout").GetComponent<Button>();

        // 添加按钮点击事件
        loginBtn.onClick.AddListener(OnLoginBtnClicked);
        logoutBtn.onClick.AddListener(OnLogoutBtnClicked);

        logoutBtn.gameObject.SetActive(false);

        EventCenter.AddListener(EventTypes.AuthSuccess, OnAuthSuccess);
    }


    /// <summary>
    /// 登录成功
    /// </summary>
    /// <param name="data">QQUser对象</param>
    private void OnAuthSuccess(object data)
    {
        QQUser user = data as QQUser;
        usernameText.text = "用户名:" + user.Username;
        StartCoroutine(LoadUserIcon(user.UserIconUrl));
        loginBtn.gameObject.SetActive(false);
        logoutBtn.gameObject.SetActive(true);
        ShowMsg("授权成功");
    }

    /// <summary>
    /// 加载头像协程
    /// </summary>
    /// <param name="url">头像url</param>
    /// <returns></returns>
    private IEnumerator LoadUserIcon(string url)
    {
        WWW www = new WWW(url);
        yield return www;
        Texture2D texture = www.texture;
        Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
        userIconImg.sprite = sprite;
    }

    /// <summary>
    /// 点击登录按钮
    /// </summary>
    private void OnLoginBtnClicked()
    {
        EventCenter.Broadcast(EventTypes.RequestAuth, null);
    }

    /// <summary>
    /// 显示提示消息
    /// </summary>
    /// <param name="msg"></param>
    private void ShowMsg(string msg)
    {
        StartCoroutine(ShowMsgCor(msg));
    }

    /// <summary>
    /// 显示提示消息协程
    /// </summary>
    /// <param name="msg"></param>
    /// <returns></returns>
    private IEnumerator ShowMsgCor(string msg)
    {
        msgText.text = msg;
        yield return new WaitForSeconds(3f);
        msgText.text = "";
    }

    /// <summary>
    /// 点击取消授权按钮
    /// </summary>
    private void OnLogoutBtnClicked()
    {
        EventCenter.Broadcast(EventTypes.CancelAuth, null);
        loginBtn.gameObject.SetActive(true);
        logoutBtn.gameObject.SetActive(false);
        usernameText.text = "";
        userIconImg.sprite = null;
    }

    private void OnDestroy()
    {
        EventCenter.RemoveListener(EventTypes.AuthSuccess, OnAuthSuccess);
    }
}
using System;
using System.Collections.Generic;

/// <summary>
/// 事件中心
/// </summary>
public class EventCenter
{
    private static Dictionary<EventTypes, Action<object>> m_EventDict = new Dictionary<EventTypes, Action<object>>();

    /// <summary>
    /// 添加事件监听
    /// </summary>
    public static void AddListener(EventTypes eventType, Action<object> callback)
    {
        if (!m_EventDict.ContainsKey(eventType))
        {
            m_EventDict.Add(eventType, null);
        }
        m_EventDict[eventType] += callback;
    }

    /// <summary>
    /// 移除事件监听
    /// </summary>
    public static void RemoveListener(EventTypes eventType, Action<object> callback)
    {
        if (!m_EventDict.ContainsKey(eventType))
            return;

        if (m_EventDict[eventType] == null)
            return;

        m_EventDict[eventType] -= callback;
    }

    /// <summary>
    /// 广播
    /// </summary>
    public static void Broadcast(EventTypes eventType, object data)
    {
        if (!m_EventDict.ContainsKey(eventType))
            return;

        Action<object> callback = m_EventDict[eventType];

        if (callback != null)
        {
            callback(data);
        }
    }

}

/// <summary>
/// 事件类型枚举
/// </summary>
public enum EventTypes
{
    RequestAuth,    // 请求授权
    AuthSuccess,    // 授权成功
    AuthFail,       // 授权失败
    CancelAuth,     // 取消授权
}

显示效果

这个示例中只处理了授权成功情况,其他情况可以参照实现

示例工程下载:https://download.youkuaiyun.com/download/qq_30473517/11154355

Unity ShareSDK QQ授权登录示例 使用ShareSDK实现QQ授权登录的示例,可以作为参考,代码的自己加了一个简易的消息中心来处理UI数据的传递 立即下载

相关推荐

qq登录插件(最新oauth2.0)

dede qq登录插件,可实现qq一键登录功能

Django增加QQ第三方登录

准备工作_OAuth2.0 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。 在开发的过程中,发现获取不到QQ号,只能获取一个OpenID的东西。最后采取存储这个OpenID并绑定对应账号的方式。所以需要创建对应的模型,即创建一个应用管理第三方登录。 QQ登录功能开...

weixin_34383618的博客 321

New-Unity-For-ShareSDK-master

Unity介入各种平台SDK,微信,支付宝,qq,facebook,微博,需要到GitHub下载,下载慢,这边上传供下载,亲测可用

Unity第三方分享(微信)插件ShareSDK使用简记

当我使用Git->push项目时,插件中的一些文件由于特殊的后缀,被Git自动忽略了,然后我手动在忽略文件(.gitignore)中,添加了不要忽略的文件后缀,当我完成后将所有的插件文件都push了Git,这时我并没有关注上面问题提到的ShareSDK.mobpds文件,直接打包测试()发现无法Uploading(可以上传,但经过官方处理之后,包消失了),花了好长时间才知道,由于没有修改ShareSDK.mobpds文件,它把所有的第三方支持文件都打到了项目中,而其中。的,由于没有权限,包就被苹果官方“

天富儿的博客 1327

Nopcommerce QQ授权插件

Nopcommerce QQ授权插件

QQ授权插件(arr包)

Android原生开发的QQ授权插件(arr包),可供Unity使用,使用方式可查看:https://blog.youkuaiyun.com/weixin_39809852/article/details/106564144

【Unity】ShareSDK接入

直奔主题、复制粘贴式接入SDK方法!本章只是起一个向导作用!代码部分就不贴了,如果有人还是不懂,我会贴一下。 一、以“新浪微博”认证、用户信息获取、分享信息为例说明(入门) 找到ShadreSDK的Unity集成文档 根据官方文档说明操作 第一步获取AppKey、第二部下载SDK完成后,第三部导入SDK后,上图的说明是特别要注意的,点进绿圈按说明操作。 本人在这里遇到一个问题,导入...

两水先木示的博客 2383

红外协议 IR NEC 协议深度解析-简单易懂协议详解

1. 协议特征 使用双向编码(又称曼彻斯特编码); 使用38K载波对编码后的波形进行调制; 位时间 1.12ms 或 2.25ms 2. 调制 定义脉冲560µS为脉冲基本宽度T; 根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4: (1) Logic “1” 位宽为2.25ms,脉冲时间560us(T + 3T); (2) Logic “0” 位宽为1.12ms,脉冲时间560us(T + T)。 (3 ) 重复码: 位宽为11.25ms,脉冲时间9ms(16T + 4T)。 3. 协议

代码打工人的博客 1万+

Unity3D 使用ShareSDK进行QQ授权登录

最近在研究第三方登录的问题,由于之前用过mob的东西,所以这次就直接去最近在研究第三方登录的问题,由于之前用过mob的东西,所以这次就直接去mob的官网看ShareSDK是支持第三方授权登录的,所以我就开始了搞一搞第三方登录的问题。

Aries_H的博客 4978

MuJoCo 仿真中的碰撞检测与参数优化实战

本文深入解析MuJoCo仿真中的碰撞检测机制与参数优化策略,涵盖位掩码配置、凸包分解实战及穿模问题解决方案。通过具体案例和参数设置建议,帮助开发者高效解决机械臂抖动、轴孔装配等常见问题,提升仿真精度与稳定性。特别针对步进电机仿真提供了高增益位置执行器的优化方案。

weixin_29081101的博客 332

±10V ADC 输入电路的高共模差分输入电压

这篇文章分析了±10V ADC输入电路的设计需求与挑战,重点讨论了高共模差分输入电压的处理方案。文章首先明确了设计目标,即安全转换±10V差分信号并保持信号完整性,同时克服高共模电压、阻抗匹配和噪声优化等难点。随后详细比较了仪表放大器和差分放大器的性能特点,并提出了器件选型理论。在信号链架构部分,文章通过公式推导阐述了增益设置、共模抑制设计和输入阻抗匹配等关键技术。此外,还建立了噪声源模型,提出了噪声优化措施。最后,文章总结了设计验证方法,并扩展了在工业保护和生物电信号采集等场景的应用。该设计强调根据具体应

泛红尘的博客 1959

Unity ShareSDK接入QQ登陆微信登陆

Unity 接入微信登陆QQ登陆

Unity项目开发中遇到的问题 630

电商数据分析19——数据分析在电商平台价格弹性研究中的应用

价格弹性是一个衡量产品价格变化对销量影响的经济学指标,对于电商平台而言,深入理解和有效运用价格弹性,对于制定竞争策略、优化产品定价具有重要意义。随着大数据时代的到来,通过数据分析研究产品的价格弹性,成为了电商企业制定价格策略、调整市场定位、优化促销活动的重要依据。

theskylife的博客 2834

Unity 接入QQ、微信登陆授权ShareSDK

UnityQQ登陆接入 永久链接:http://blog.youkuaiyun.com/Aries_H/article/details/78133687 public void QQLogin()     {         //设置回掉函数         shareSdk.authHandler = AuthResultHandler;         //请求授权         shareSdk.A...

weixin_42600446的博客 2260

量子化学仿真软件:VASP_(7).表面与界面性质模拟

在量子化学仿真软件领域,表面与界面性质的模拟是研究多相催化、表面反应、材料科学等领域的关键工具。VASP(Vienna Ab Initio Simulation Package)作为一种广泛使用的密度泛函理论(DFT)计算软件,提供了强大的功能来模拟表面与界面的性质。本节将详细介绍如何使用VASP进行表面与界面性质的模拟,包括模型构建、输入文件准备、计算设置、结果分析等步骤。

kkchenjj的博客 948

人工智能面试总结-Python

B站:啥都会一点的研究生 公众号试读:啥都会一点的研究生 目录说说Python程序运行过程?说说Python的作用域?说说Python的数据结构?说说Python中可变与不可变类型?说说进程与线程?说说Python中的多线程?说说Python中的多进程?说说Python互斥锁与死锁?说说Lambda?说说Python的深拷贝与浅拷贝?说说Python多线程是否能用多个CPU,为什么?说说Python垃圾回收机制?说说Python里的生成器?说说迭代器与生成器的区别?说说Python 列表的 del,rem.

啥都生的博客 1万+

Unity实现微信登录使用ShareSDK

首先说明,本人纯新手,不动Android也不懂iOS,作为一个这样的新手,在Unity里面实现微信登录真是费了不少劲,好在ShareSDK给集成了很多东西,就这样还是走了很多很多的弯路,为了避免后面的同学再次走弯路,我决定写下这篇博客记录下详细过程!第一步:去微信开放平台申请你的应用地址:http://open.weixin.qq.com/创建移动应用等待审核,然后注册成为开发者,此步骤我不在细讲...

充分准备是对自己的认可! 1万+

Python 爬虫实战:淘宝直播间实时数据抓取(弹幕分析 + 流量监控)

随着电商直播的迅猛发展,淘宝直播已成为品牌推广和商品销售的重要阵地。通过爬取淘宝直播间的实时数据,包括弹幕互动和流量信息,可以帮助商家深入了解用户行为、优化直播策略,同时为市场分析和商业决策提供数据支持。本文将深入探讨如何利用 Python 爬虫技术实现对淘宝直播间实时数据的抓取,并进行弹幕分析和流量监控。

u014481728的博客 729

Unity实现微信登录使用ShareSDK(转载)

首先说明,本人纯新手,不动Android也不懂iOS,作为一个这样的新手,在Unity里面实现微信登录真是费了不少劲,好在ShareSDK给集成了很多东西,就这样还是走了很多很多的弯路,为了避免后面的同学再次走弯路,我决定写下这篇博客记录下详细过程!第一步:去微信开放平台申请你的应用地址:http://open.weixin.qq.com/创建移动应用等待审核,然后注册成为开发者,此步骤我不在细讲...

zcc858079762的博客 1132

Python 爬虫实战:爬取 GitHub 热门项目(星数 / 语言 / 作者)

本文系统介绍了使用Python爬虫技术获取GitHub热门项目数据的完整方案。通过分析GitHub Trending页面和官方API两种数据源,详细讲解了HTML解析、JSON数据处理、反爬应对策略等关键技术。采用requests、BeautifulSoup、pandas等工具链,实现了项目信息(名称、星数、语言等)的结构化爬取,并配套数据清洗、统计分析及可视化功能。特别强调遵守GitHub API使用规范,包括Token认证、请求频率控制等合规要求。该方案为开发者提供了一种高效、合法的数据采集方法,适用于

2503_91057718的博客 2342

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Unity快速集成ShareSDK实现分享和授权登录

1. 准备工作 ShareSDK下载 结构如下图所示: SDK 2. SDK置入 创建一个工程, 导入ShareSDKForU3D.unitypackage (注: ShareSDK为我们提供一个test场景,可以自己去分析一下. 当然这里的ShareSDK账号申请以及创建APP等操作就不再说明 我们直接使用官方为我们提供的数据即可)报错解决: BuildSetting中把当前的环境改成A

Young的博客 794

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

原创 一.  从    http://www.mob.com/    下载Unity3d的ShareSDK包。 二.  注册一个账号,随便创建一个应用,获得一个APP Key ( 这一步不是必须的,但是可以统计分析数据,很实用)。 三.  导入ShareSDKForU3D.unitypackage插件包,在Unity里,随便在一个物体上拖进shareSDK这个脚本。

我是重阳 的专栏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Unity3D之使用ShareSDK做分享和第三方登录功能

一.  从    http://www.mob.com/    下载Unity3d的ShareSDK包。   二.  注册一个账号,随便创建一个应用,获得一个APP Key ( 这一步不是必须的,但是可以统计分析数据,很实用)。   三.  导入ShareSDKForU3D.unitypackage插件包,在Unity里,随便在一个物体上拖进shareSDK这个脚本,选择为安卓项目。  ...

居安思危,游戏人生。 1302

【Unity】中接入QQ官方SDK实现QQ登录(Android环境) 新手教程

作为一个新手做准备工作的时候,在网上找了很多例子,发现其中有很多例子是有错误的,各种花式报错,好在最后终于成功了,在此记录一下自己接入QQSDK的过程。 前期准备 QQ官方SDK下载 地址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD版本为:Android_SDK_V3.3.3 Unity5.6.1f1以上版本 6...

Move_Cat的博客 6505

【Unity】Unity接入ShareSDK实现QQ登录和QQ分享、微信分享

由于微信登录需要企业审核,我这里就不说明了,有需要的可以去官网看一下文档,和QQ登录比多了一个打包的步骤。 第一步:到官网申请开发者账号:MOB 第二步:到腾讯QQ开放平台申请开发者账号并创建应用:腾讯开放平台 点击创建应用。然后会有一个:APPID和APPKEY 保留下来它 第三步:在Mob官网创建自己的应用:http://dashboard.mob.com/#!/index ...

FransicZhang的博客 2836

Unity接入原生QQ登录

前言 我是做Unity的,闲来无事想接一下qq登陆。(说来惭愧入行三年没碰过安卓,这次也算是小小看一下) 提前需要准备的东西 1.AndroidStudio(3.5.3) 2.Unity(2019.1.12f1) 3.jdk(1.8) 4.QQ原生SDK (下载链接:https://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD) 参考了网上各...

qq_17583689的博客 4052
上一篇: Unity:记录在学习和使用Unity过程中遇到的坑
下一篇: 第一个OpenGL程序
Blinkedu
博客等级 码龄11年 16粉丝 18原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值