码迷,mamicode.com
首页 > 编程语言 > 详细

【Unity】ShareSDK第三方登录

时间:2018-04-08 22:29:59      阅读:648      评论:0      收藏:0      [点我收藏+]

标签:按钮   用户   技术   isp   hresult   click   cli   object   this   

以用微博登录为例

1、在mob.com上注册帐号,添加一个应用,给该应用添加ShareSDK。
2、登录微博开放平台,填写开发者信息。添加一个应用,确定安卓包名,下载微博提供的签名生成工具(md5签名生成器apk),安装到安卓手机上。打开工具输入安卓包名,得到签名字符串。把包名和签名填上。在OAuth2.0授权设置中输入回调页url。
3、打开Unity新建一个项目,Player Settings中填上上面的包名,自己的密钥库和密钥。
4、下载ShareSDK for Unity,把包里的ShareSDK.unitypackage导入到项目中。
5、新建一个场景取名Init,一个空物体(可取名ShareSDKManager),专门用于存放全游戏中通用的(可跨场景长的、生命周期的)数据,开始游戏时先进入该场景,执行ShareSDK初始化,然后再跳转到其他游戏场景。该场景只会进入一次。
6、给ShareSDKManager物体挂上Share SDK脚本,填上在微博开放平台中给的App Key,App Secret和回调页路径Redirect Url(默认填的是官方给的Debug帐号的信息)。
7、在脚本的Dev Info中打开本次测试id新浪微博Sinaweibo进行修改。其他不用管,默认都填的官方给的Debug帐号信息。

 技术分享图片

8、新建一个ShareSDKManager脚本,挂载到ShareSDKManager物体上。
using cn.sharesdk.unity3d;
using UnityEngine;

public class ShareSDKManager : MonoBehaviour {
    private static ShareSDKManager _instance;
    public static ShareSDKManager Instance {
        get {
            return _instance;
        }
    }

    [HideInInspector]
    public ShareSDK ssdk; 

    void Start () {
        _instance = this;
        DontDestroyOnLoad(gameObject);
        ssdk= gameObject.GetComponent<ShareSDK>();
        // ShareSDK.Awake()中已经执行了shareSDKUtils.InitSDK(appKey,appSecret)初始化操作,这里是否写初始化可随意
        // 初始化完成后,跳转场景
        UnityEngine.SceneManagement.SceneManager.LoadScene(1);
    }
}
9、新建一个场景取名Login,这是在Init场景之后进入的登录页面场景。新建脚本Login,挂到新建的LoginManager物体上。场景中的【用新浪微博登录】按钮触发该物体中Login脚本对应的方法。登录方法的流程参考下图。这里以应用没有用户系统的体系为例。
技术分享图片
using cn.sharesdk.unity3d;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Login : MonoBehaviour {

    ShareSDK ssdk;
    void Start () {
        ssdk= ShareSDKManager.Instance.shareSDK;
        ssdk.authHandler = OnAuthResultHandler; // 授权结果的回调函数
    }
    
    // 用新浪微博登录
    public void OnSinaLoginButtonClick()
    {
        if (ssdk.IsAuthorized(PlatformType.SinaWeibo)) // 检测指定的平台是否已经授权过了
        {
            // 获得授权信息
            Utility.WriteFile(Application.persistentDataPath, "AuthInfo.txt", ssdk.GetAuthInfo(PlatformType.SinaWeibo).toJson());
            // 进入下一场景
            SceneManager.LoadScene(2);
        }
        else // 指定的平台尚未授权,给它授权
        {
            ssdk.Authorize(PlatformType.SinaWeibo);
        }
    }

    /// <summary>
    /// 授权结果的回调函数
    /// </summary>
    /// <param name="reqID"></param>
    /// <param name="state">授权状态:成功,失败,取消</param>
    /// <param name="type">授权平台类型</param>
    /// <param name="data">返回的数据</param>
    void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
        switch (state)
        {
            case ResponseState.Begin:
                break;
            case ResponseState.Success:
                // data数据写入文件
                Utility.WriteFile(Application.persistentDataPath, "AuthData.txt", data.toJson());
                // 获得授权信息
                Utility.WriteFile(Application.persistentDataPath, "AuthInfo.txt", ssdk.GetAuthInfo(PlatformType.SinaWeibo).toJson());
                // 进入下一场景
                SceneManager.LoadScene(2);
                break;
            case ResponseState.Fail:
            case ResponseState.Cancel:
                // 失败或取消要清除指定平台的授权信息
                ssdk.CancelAuthorize(type);
                break;
            case ResponseState.BeginUPLoad:
                break;
            default:
                break;
        }
    }
}
写一个文件读写的工具类。
using System.IO;

/// <summary>
/// 读写文件的工具类。
/// 用于查看ShareSDK授权时返回的data中有哪些数据。
/// </summary>
public static class Utility
{
    public static void WriteFile(string path, string name, string info)
    {
        StreamWriter writer;
        FileInfo fi = new FileInfo(path + "/" + name);
        writer = fi.CreateText();
        writer.WriteLine(info);
        writer.Close();
        writer.Dispose();
    }
    
    public static string ReadFile(string path, string name)
    {
        StreamReader reader;
        FileInfo fi = new FileInfo(path + "/" + name);
        reader = fi.OpenText();
        string info = reader.ReadToEnd();
        reader.Close();
        reader.Dispose();
        return info;
    }
}
9、打包APK后在安卓模拟器上运行。点击【用新浪微博登录】按钮后即可看到效果:跳转到填微博账号和密码,输入正确后会跳转到微博授权页面,点击确定授权完成后,游戏进入下一个场景,完成操作。
坑点
  • 如果点击按钮没反应,到微博开放平台测试信息—添加测试帐号,关联到自己的微博,因为开发者身份认证未通过审核时不能拿到数据。技术分享图片
  • 如果点击按钮后页面回退,是Unity中ShareSDK脚本的微博App Key和App Secret没填对。(有默认的Debug帐号的数据,注意检查)。
  • 报错“你所访问的站点在微博认证失败 错误号21322 重定向地址不匹配”。是因为在Unity脚本中没有填写回调url,要跟微博开放平台中输入的回调页地址一致才行!
  • 技术分享图片技术分享图片

【Unity】ShareSDK第三方登录

标签:按钮   用户   技术   isp   hresult   click   cli   object   this   

原文地址:https://www.cnblogs.com/guxin/p/unity-sharesdk-login-demo.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!