Unity3D 成神之路

ShareSDK社会化分享

2018-11-08  本文已影响6人  _凉笙
ShareSDK.png 首先先进入ShareSDK官网注册一个账号然后进入后台添加一个应用,我们先添加新浪微博的分享,可以在ShareSDK里面找到这篇文章,http://bbs.mob.com/thread-89-1-4.html
,先去新浪微博开放平台先申请授权,http://open.weibo.com/进入新浪微博的开放平台官网点击应用接入,然后开始创建一款应用,可以看到下图我们需要包名签名
image.png 包名就填写unity里面的package Name,那么签名呢?,这个就需要我们自己去获取了,下面说说怎么获取签名
image.png 在cmd命令提示符里面,找到你所安装的JDK的bin目录下转到JDK所在的文件目录下 image.png 输入以下命令
keytool -genkey -alias liangshenkey -keyalg RSA -validity 2400 -keystore KeyTool.keystore
image.png 然后一步一步按提示走填写完所有的信息填写完全,填写完全后就可以在JDK下的bin文件里面找到签名文件了 image.png 然后在unity里面的playerSettings里面找到Publicshing Setting就可以把刚刚的签名文件导入了,导入签名文件和密码 image.png 然后把包名和其他设置填写下,打包APK包安装到手机上。下面去Github上去下载新浪微博的MD5签名工具https://github.com/mobileresearch/weibo_android_sdk/blob/master/app_signatures.apk。下载下来后安装到手机上,打开签名工具,输入unity里面填写的包名,生成就能生成签名码了。 image.png 这样我们包名和签名就搞定了,新浪微博的其他信息自行填写就OK了。然后我们回到高级信息里面把授权回调页填写下,这个是有用的。
image.png 下面就去ShareSDK官网把SDK下载下拉导入到unity里面http://www.mob.com/download,导入后新建个初始化的InitScene场景把场景里的灯光和摄像机删除,创建一个空物体ShareSDKGame添加ShareSDK的脚本,填写上Mob网上的之前我们创建应用的Key和Secret image.png 然后在把新浪微博的key和secret填写上,Redirect Url则填写之前新浪微博上的授权回调页的Url。
image.png 随后我们创建脚本ShareSDKManager,页挂载在ShareSDKGame上。
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 = GetComponent<ShareSDK>();
        UnityEngine.SceneManagement.SceneManager.LoadScene(1);
    }
}

然后我们再创建个登陆的Login场景,首先把场景搭建好,然后添加个空物体LoginManager,上面挂载Login脚本.


image.png
using cn.sharesdk.unity3d;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class Login : MonoBehaviour {

    ShareSDK ssd;

    // Use this for initialization
    void Start () {
        ssd = ShareSDKManager.Instance.ssdk;
        //指定授权结果回调函数
        ssd.authHandler = OnAuthResultHandler;
    GameObject.Find("SinaLoginButton").GetComponent<Button>().onClick.AddListener(SinaLoginButtonClick) ;

    }

    public void SinaLoginButtonClick()
    {
        //检测指定平台是否已经授权过
        if (ssd.IsAuthorized(PlatformType.SinaWeibo))
        {
            //授权成功后通过GetAuthInfo获取授权信息
            Hashtable table = ssd.GetAuthInfo(PlatformType.SinaWeibo);
            Utility.WriteFile(Application.persistentDataPath, "AuthInfo.dat", table.toJson());
            Utility.MakeToast("微博用户:" + table["userName"] + "登陆成功");
            UnityEngine.SceneManagement.SceneManager.LoadScene(2);
        }
        else
        {
            //使用指定平台授权
            ssd.Authorize(PlatformType.SinaWeibo);
        }
    }
    //state授权状态,type为授权平台类型,data为返回
    void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
        //授权成功
        if (state == ResponseState.Success)
        {
            Utility.WriteFile(Application.persistentDataPath, "AuthResult.dat", data.toJson());
            //授权成功后通过GetAuthInfo获取授权信息
            Hashtable table =ssd.GetAuthInfo(PlatformType.SinaWeibo);
            Utility.WriteFile(Application.persistentDataPath, "AuthInfo.dat", table.toJson());
            Utility.MakeToast("微博用户:" + ssd.GetAuthInfo(PlatformType.SinaWeibo)["userName"] + "登陆成功");
            UnityEngine.SceneManagement.SceneManager.LoadScene(2);

            Utility.MakeToast("登陆被取消!");
        }
        else if (state == ResponseState.Fail)
        {
            //授权失败清空指定平台授权信息
            ssd.CancelAuthorize(type);
            Utility.MakeToast("登陆失败!");
        }
        else if (state == ResponseState.Cancel)
        {
            ssd.CancelAuthorize(type);
            Utility.MakeToast("登陆被取消!");
        }
    }
}

还有一个工具类

using System.IO;
using UnityEngine;

public static class Utility{
    public static void WriteFile(string path, string name, string info)
    {
        StreamWriter sw;
        FileInfo fi = new FileInfo(path + "/" + name);
        sw = fi.CreateText();
        sw.WriteLine(info);
        sw.Close();
        sw.Dispose();
    }
    public static string ReadFile(string path, string name)
    {
        StreamReader sr;
        FileInfo fi = new FileInfo(path + "/" + name);
        sr = fi.OpenText();
        string info = sr.ReadToEnd();
        sr.Close();
        sr.Dispose();
        return info;
    }
    public static void  MakeToast(string info)
    {
        AndroidJavaObject currentActivity = new AndroidJavaObject("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
        AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
        currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
         {
             Toast.CallStatic<AndroidJavaObject>("maskText", currentActivity, info, Toast.GetStatic<int>("LENGTH_LONG")).Call("show");
         }
        ));
    }
}

接下来在创建游玩的场景Info,创建好后搭建场景


image.png 这样我们就完成了微博账号的分享,最后我们再打包出来 image.png 因为之前创建的应用需要通过审核,我这里没有通过,所以最后我们在再新浪微博开放平台的测试信息里添加个自己的账号 image.png 这时候把包安装到手机上就可以看到效果了
最后效果.png

我们也可以在手机内部存储-Adroid-data-“你的包名”-files里面的AuthInfo.data里面取到我们获取到的授权信息,这是我们自己打印出来的信息结果,可以看到我们可以获取到微博的头像,id和名字。


image.png
上一篇下一篇

猜你喜欢

热点阅读