using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Reflection;
namespace cn.sharesdk.unity3d
{
///
/// ShareSDK.
///
public class ShareSDK : MonoBehaviour
{
public static string MobAppKey = "1b17e87d222c1";
public static string QQAppKey = "100371282";
public static string QQAppSecrete = "aed9b0303e3ed1e27bae87c33761161d";
public static string WeChatAppKey = "wx4868b35061f87885";
public static string WeChatSecrete = "64020361b8ec4c99936c0e3999a9f249";
//public static string SinaAppKey = "568898243";
//public static string SinaAppSecrete = "38a4f8204cc784f81f9f0daaf31e02e3";
public static string SinaAppKey = "1089133069";
public static string SinaAppSecrete = "f44fdbcf346c507cd989ebdbcb8cd251";
//public static string GoogleClientID = "682795613743-cfo3a8r4va0ujja7qofr54hobt2kv3cq.apps.googleusercontent.com";
//public static string GoogleAppKey = "232554794995.apps.googleusercontent.com";
//public static string GoogleAppSecrete = "PEdFgtrMw97aCvf0joQj7EMk";
public static string GoogleAppKey = "";
public static string GoogleAppSecrete = "";
public static string GoogleClientID = "839373660096-rekqhoistqv24rvb0luobcfmjbo6gonj.apps.googleusercontent.com";
//public static string FacebookAppKey = "107704292745179";
//public static string FacebookAppSecrete = "38053202e1a5fe26c80c753071f0b573";
public static string FacebookAppKey = "1996720443893282";
public static string FacebookAppSecrete = "45a70c021b5cdde6f1f82891181d0306";
private int reqID;
public DevInfoSet devInfo;
public ShareSDKImpl shareSDKUtils;
public EventHandler authHandler;
public EventHandler shareHandler;
public EventHandler showUserHandler;
public EventHandler getFriendsHandler;
public EventHandler followFriendHandler;
void Awake()
{
}
public void Initialize()
{
devInfo = new DevInfoSet();
Type type = devInfo.GetType();
Hashtable platformConfigs = new Hashtable();
FieldInfo[] devInfoFields = type.GetFields();
foreach (FieldInfo devInfoField in devInfoFields)
{
DevInfo info = (DevInfo)devInfoField.GetValue(devInfo);
int platformId = (int)info.GetType().GetField("type").GetValue(info);
FieldInfo[] fields = info.GetType().GetFields();
Hashtable table = new Hashtable();
foreach (FieldInfo field in fields)
{
if ("type".EndsWith(field.Name))
{
continue;
}
else if ("Enable".EndsWith(field.Name) || "ShareByAppClient".EndsWith(field.Name) || "BypassApproval".EndsWith(field.Name))
{
table.Add(field.Name, Convert.ToString(field.GetValue(info)).ToLower());
}
else
{
table.Add(field.Name, Convert.ToString(field.GetValue(info)));
}
}
platformConfigs.Add(platformId, table);
}
#if UNITY_ANDROID
shareSDKUtils = new AndroidImpl(gameObject);
#elif UNITY_IPHONE
shareSDKUtils = new iOSImpl(gameObject);
#endif
shareSDKUtils.InitSDK(MobAppKey);
shareSDKUtils.SetPlatformConfig(platformConfigs);
}
///
/// callback the specified data.
///
///
/// Data.
///
private void _Callback (string data)
{
if (data == null)
{
return;
}
Hashtable res = (Hashtable) ShareMiniJSON.jsonDecode(data);
if (res == null || res.Count <= 0)
{
return;
}
int status = Convert.ToInt32(res["status"]);
int reqID = Convert.ToInt32(res["reqID"]);
PlatformType platform = (PlatformType)Convert.ToInt32(res["platform"]);
int action = Convert.ToInt32(res["action"]);
// Success = 1, Fail = 2, Cancel = 3
switch(status)
{
case 1:
{
Console.WriteLine(data);
Hashtable resp = (Hashtable) res["res"];
OnComplete(reqID, platform, action, resp);
break;
}
case 2:
{
Console.WriteLine(data);
Hashtable throwable = (Hashtable) res["res"];
OnError(reqID, platform, action, throwable);
break;
}
case 3:
{
OnCancel(reqID, platform, action);
break;
}
}
}
///
/// Raises the error event.
///
/// Platform.
/// Action.
/// Throwable.
public void OnError (int reqID, PlatformType platform, int action, Hashtable throwable)
{
switch (action)
{
case 1:
{ // 1 == Platform.ACTION_AUTHORIZING
if (authHandler != null)
{
authHandler(reqID, ResponseState.Fail, platform, throwable);
}
break;
}
case 2:
{ //2 == Platform.ACTION_GETTING_FRIEND_LIST
if (getFriendsHandler != null)
{
getFriendsHandler(reqID, ResponseState.Fail, platform, throwable);
}
break;
}
case 6:
{ //6 == Platform.ACTION_FOLLOWING_USER
if (followFriendHandler != null)
{
followFriendHandler(reqID, ResponseState.Fail, platform, throwable);
}
break;
}
case 8:
{ // 8 == Platform.ACTION_USER_INFOR
if (showUserHandler != null)
{
showUserHandler(reqID, ResponseState.Fail, platform, throwable);
}
break;
}
case 9:
{ // 9 == Platform.ACTION_SHARE
if (shareHandler != null)
{
shareHandler(reqID, ResponseState.Fail, platform, throwable);
}
break;
}
}
}
///
/// Raises the success event.
///
/// Platform.
/// Action.
/// Res.
public void OnComplete (int reqID, PlatformType platform, int action, Hashtable res)
{
switch (action)
{
case 1:
{ // 1 == Platform.ACTION_AUTHORIZING
if (authHandler != null)
{
authHandler(reqID, ResponseState.Success, platform, null);
}
break;
}
case 2:
{ //2 == Platform.ACTION_GETTING_FRIEND_LIST
if (getFriendsHandler != null)
{
getFriendsHandler(reqID, ResponseState.Success, platform, res);
}
break;
}
case 6:
{ //6 == Platform.ACTION_FOLLOWING_USER
if (followFriendHandler != null)
{
followFriendHandler(reqID, ResponseState.Success, platform, res);
}
break;
}
case 8:
{ // 8 == Platform.ACTION_USER_INFOR
if (showUserHandler != null)
{
showUserHandler(reqID, ResponseState.Success, platform, res);
}
break;
}
case 9:
{ // 9 == Platform.ACTION_SHARE
if (shareHandler != null)
{
shareHandler(reqID, ResponseState.Success, platform, res);
}
break;
}
}
}
///
/// Raises the cancel event.
///
/// Platform.
/// Action.
public void OnCancel (int reqID, PlatformType platform, int action)
{
switch (action)
{
case 1:
{ // 1 == Platform.ACTION_AUTHORIZING
if (authHandler != null)
{
authHandler(reqID, ResponseState.Cancel, platform, null);
}
break;
}
case 2:
{ //2 == Platform.ACTION_GETTING_FRIEND_LIST
if (getFriendsHandler != null)
{
getFriendsHandler(reqID, ResponseState.Cancel, platform, null);
}
break;
}
case 6:
{ //6 == Platform.ACTION_FOLLOWING_USER
if (followFriendHandler != null)
{
followFriendHandler(reqID, ResponseState.Cancel, platform, null);
}
break;
}
case 8:
{ // 8 == Platform.ACTION_USER_INFOR
if (showUserHandler != null)
{
showUserHandler(reqID, ResponseState.Cancel, platform, null);
}
break;
}
case 9:
{ // 9 == Platform.ACTION_SHARE
if (shareHandler != null)
{
shareHandler(reqID, ResponseState.Cancel, platform, null);
}
break;
}
}
}
///
/// init the ShareSDK.
///
public void InitSDK (String appKey)
{
// if you don't add ShareSDK.xml in your assets folder, use the following line
shareSDKUtils.InitSDK (appKey);
}
///
/// Sets the platform config.
///
public void SetPlatformConfig (Hashtable configInfo)
{
shareSDKUtils.SetPlatformConfig (configInfo);
}
///
/// Authorize the specified type, observer and resultHandler.
///
///
/// Type.
///
///
/// Observer.
///
///
/// Result handler.
///
public int Authorize (PlatformType platform)
{
reqID ++;
shareSDKUtils.Authorize(reqID, platform);
return reqID;
}
///
/// Cancel authorized
///
///
/// Type.
///
public void CancelAuthorize (PlatformType platform)
{
shareSDKUtils.CancelAuthorize(platform);
}
///
/// Has authorized
///
///
/// true has authorized, otherwise not authorized.
///
///
/// Type.
///
public bool IsAuthorized (PlatformType platform)
{
return shareSDKUtils.IsAuthorized(platform);
}
public bool IsClientValid (PlatformType platform)
{
return shareSDKUtils.IsClientValid(platform);
}
///
/// Gets the user info.
///
///
/// Type.
///
///
/// Callback.
///
public int GetUserInfo (PlatformType platform)
{
reqID ++;
shareSDKUtils.GetUserInfo(reqID, platform);
return reqID;
}
///
/// Shares the content.
///
///
/// Type.
///
///
/// Content.
///
///
/// Callback.
///
public int ShareContent(PlatformType platform, ShareContent content)
{
reqID ++;
shareSDKUtils.ShareContent(reqID, platform, content);
return reqID;
}
///
/// Shares the content.
///
///
/// Type.
///
///
/// Content.
///
///
/// Callback.
///
public int ShareContent(PlatformType[] platforms, ShareContent content)
{
reqID ++;
shareSDKUtils.ShareContent(reqID, platforms, content);
return reqID;
}
///
/// Shows the share menu of using onekeyshare.
///
///
/// Types.
///
///
/// Content.
///
///
/// Callback.
///
public int ShowPlatformList (PlatformType[] platforms, ShareContent content, int x, int y)
{
reqID ++;
shareSDKUtils.ShowPlatformList(reqID, platforms, content, x, y);
return reqID;
}
///
/// Shows the share view of using onekeyshare.
///
///
/// Type.
///
///
/// Content.
///
///
/// Callback.
///
public int ShowShareContentEditor (PlatformType platform, ShareContent content)
{
reqID ++;
shareSDKUtils.ShowShareContentEditor(reqID, platform, content);
return reqID;
}
///
/// share according to the name of node in ShareContent.xml(you can find it in Xcode) [only valid in iOS temporarily][此接口暂时仅支持iOS环境]
///
///
/// Platform Type
///
///
/// the name of node in ShareContent.xml file
///
///
/// your share customFields which will be replace in ShareContent.xml
///
public int ShareWithContentName (PlatformType platform, string contentName, Hashtable customFields)
{
reqID++;
shareSDKUtils.ShareWithContentName (reqID, platform, contentName, customFields);
return reqID;
}
///
/// share according to the name of node in ShareContent.xml(you can find it in Xcode) (only valid in iOS temporarily)(此接口暂时仅支持iOS环境)
///
///
///
/// the name of node in ShareContent.xml file
///
///
/// your share customFields which will be replace in ShareContent.xml
///
///
/// Platform Types
///
///
/// the coordinates of the share menu
///
public int ShowPlatformListWithContentName (string contentName, Hashtable customFields, PlatformType[] platforms, int x, int y)
{
reqID++;
shareSDKUtils.ShowPlatformListWithContentName (reqID, contentName, customFields, platforms, x, y);
return reqID;
}
///
/// share according to the name of node in ShareContent.xml file (only valid in iOS temporarily)(此接口暂时仅支持iOS环境)
///
///
/// Platform Type
///
///
/// the name of node in ShareContent.xml file
///
///
/// your share customFields which will be replace in ShareContent.xml
///
public int ShowShareContentEditorWithContentName (PlatformType platform, string contentName, Hashtable customFields)
{
reqID++;
shareSDKUtils.ShowShareContentEditorWithContentName (reqID, platform, contentName, customFields);
return reqID;
}
///
/// Gets the friends.
///
/// Type.
/// Count.
/// Page.
public int GetFriendList (PlatformType platform, int count, int page)
{
reqID ++;
shareSDKUtils.GetFriendList (reqID, platform, count, page);
return reqID;
}
///
/// Follows the friend.
///
/// Type.
/// Account.
public int AddFriend (PlatformType platform, String account)
{
reqID ++;
shareSDKUtils.AddFriend (reqID, platform, account);
return reqID;
}
///
/// Gets the auth info.
///
/// Type.
public Hashtable GetAuthInfo (PlatformType platform)
{
return shareSDKUtils.GetAuthInfo (platform);
}
///
/// Close the SSO when authorize.
///
/// If set to true open.
public void DisableSSO(Boolean open)
{
shareSDKUtils.DisableSSO (open);
}
///
/// Event result listener.
///
public delegate void EventHandler (int reqID, ResponseState state, PlatformType type, Hashtable data);
}
}