ShareSDK.png
,先去新浪微博开放平台先申请授权,http://open.weibo.com/进入新浪微博的开放平台官网点击应用接入,然后开始创建一款应用,可以看到下图我们需要包名签名
image.png
image.png
image.png
keytool -genkey -alias liangshenkey -keyalg RSA -validity 2400 -keystore KeyTool.keystore
image.png
image.png
image.png
image.png
image.png
image.png
image.png
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
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>();
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里面看到用户的详细信息。这里自行去查看。