ShareSDK社会化分享

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 Info : MonoBehaviour {

    private Image userIcon;
    private Text userName;
    private Text userID;
    private Text DetailPosition;
    ShareSDK ssdk;

    private 
    // Use this for initialization
    void Start () {
        userIcon = GameObject.Find("UserIcon").GetComponent<Image>();
        userName = GameObject.Find("UserName").GetComponent<Text>();
        userID = GameObject.Find("UserID").GetComponent<Text>();
        userID = GameObject.Find("DetailPosition").GetComponent<Text>();
        GameObject.Find("EnterButton").GetComponent<Button>().onClick.AddListener(OnEnterButtonClick);
        GameObject.Find("SignOutButton").GetComponent<Button>().onClick.AddListener(OnSignOutButtonClick);
        GameObject.Find("DetailButton").GetComponent<Button>().onClick.AddListener(OnDetailButtonClick);
        ssdk = ShareSDKManager.Instance.ssdk;
        ssdk.showUserHandler = OnGetUserInfoResultHandler;
        //从事先保存的文件中读取基本信息
        Hashtable authInfo = Utility.ReadFile(Application.persistentDataPath,"AuthInfo.dat").hashtableFromJson();
        StartCoroutine(LoadUserIcon(authInfo["userIcon"].ToString()));
        userName.text = authInfo["userName"].ToString();
        userID.text = authInfo["userID"].ToString();
    }

    IEnumerator LoadUserIcon(string url)
    {
        WWW www = new WWW(url);
        yield return www;
        if (www.isDone && www.error==null)
        {
            Texture2D texture2D = www.texture;
            userIcon.sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), Vector2.zero);
        }
    }

    public void OnEnterButtonClick()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene(3);
    }
    public void OnDetailButtonClick()
    {
        ssdk.GetUserInfo(PlatformType.SinaWeibo);
    }
    public void OnSignOutButtonClick()
    {
        //取消指定平台的授权
        ssdk.CancelAuthorize(PlatformType.SinaWeibo);
        UnityEngine.SceneManagement.SceneManager.LoadScene(1);
    }
    void OnGetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
        //授权成功
        if (state == ResponseState.Success)
        {
            Utility.WriteFile(Application.persistentDataPath, "UserInfo.dat", data.toJson());
            DetailPosition.text = "您的位置:" +  Utility.UniCodeTostring(data["location"].ToString());
        }
        else if (state == ResponseState.Fail)
        {
 
            Utility.MakeToast("获取用户详情失败!");
        }
        else if (state == ResponseState.Cancel)
        {

            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
下面我们将用户名字\ID\头像显示到我们的游戏页面上,并且去获取用户的一些详细信息,首先在Info场景中创建空对象InfoManager,并在上面添加Info脚本.写入代码
using cn.sharesdk.unity3d;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class Info : MonoBehaviour {

    private Image userIcon;
    private Text userName;
    private Text userID;
    private Text DetailPosition;
    ShareSDK ssdk;

    private 
    // Use this for initialization
    void Start () {
        userIcon = GameObject.Find("UserIcon").GetComponent<Image>();
        userName = GameObject.Find("UserName").GetComponent<Text>();
        userID = GameObject.Find("UserID").GetComponent<Text>();
        DetailPosition= GameObject.Find("DetailPosition").GetComponent<Text>();
        ssdk = ShareSDKManager.Instance.ssdk;
        ssdk.showUserHandler = OnGetUserInfoResultHandler;
        //从事先保存的文件中读取基本信息
        Hashtable authInfo = Utility.ReadFile(Application.persistentDataPath,"AuthInfo.dat").hashtableFromJson();
        StartCoroutine(LoadUserIcon(authInfo["userIcon"].ToString()));
        userName.text = authInfo["userName"].ToString();
        userID.text = authInfo["userID"].ToString();
    }

    IEnumerator LoadUserIcon(string url)
    {
        WWW www = new WWW(url);
        yield return www;
        if (www.isDone && www.error==null)
        {
            Texture2D texture2D = www.texture;
            userIcon.sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), Vector2.zero);
        }
    }

    public void OnEnterButtonClick()
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene(3);
    }
    public void OnDetailButtonClick()
    {
        ssdk.GetUserInfo(PlatformType.SinaWeibo);
    }
    public void OnSignOutButtonClick()
    {
        //取消指定平台的授权
        ssdk.CancelAuthorize(PlatformType.SinaWeibo);
        UnityEngine.SceneManagement.SceneManager.LoadScene(1);
    }
    void OnGetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
    {
        //授权成功
        if (state == ResponseState.Success)
        {
            Utility.WriteFile(Application.persistentDataPath, "UserInfo.dat", data.toJson());
            DetailPosition.text = "您的位置:" +  Utility.UniCodeTostring(data["location"].ToString());
        }
        else if (state == ResponseState.Fail)
        {
 
            Utility.MakeToast("获取用户详情失败!");
        }
        else if (state == ResponseState.Cancel)
        {

            Utility.MakeToast("获取用户详情操作被取消!");
        }

    }
}

并在在工具类Utility里面再添加一个函数

    public static string UniCodeTostring(string unicode)
    {
        Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})");
        return reg.Replace(unicode, delegate (Match m)
         {
             return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString();
         });
    }

这样我们在将我们的工程打包出来运行就可以看到我们的游戏页面获取到了我们的头像名字和ID还有详细的信息。地理位置等等


image.png

并且我们也可以在手机内部存储-Adroid-data-“你的包名”-files里面的UserInfo.data里面看到用户的详细信息。这里自行去查看。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • #import <WXApi.h> is not found, 找不到WXAPi原因:1.手动集成时, 没有导入W...
    Chrisbooty阅读 1,034评论 0 0
  • shareSDK是常用的社会化分享的第三方工具,之前项目中有用到,当时没有记录下来步骤,最近更新了Xcode9,有...
    _Waiting_阅读 876评论 0 0
  • 1添加应用 在ShareSDK的官网 进行添加应用 2 下载ShareSDK 选择要分享的平台,下载shareSD...
    cy_why阅读 1,781评论 1 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • 用左耳倾听情话缠绵 用左脑勾画轮廓模样 用左手触摸温度指尖 用左脚丈量距离远行 不知为何 只想用左边记住你!
    南风知意吹梦西州阅读 489评论 1 2