hexiaojie 1 жил өмнө
parent
commit
9fed3001e6
63 өөрчлөгдсөн 5988 нэмэгдсэн , 21 устгасан
  1. 8 0
      GameClient/.idea/.idea.GameClient/.idea/indexLayout.xml
  2. 8 0
      GameClient/Assets/Demo.meta
  3. 800 0
      GameClient/Assets/Demo/Demo.cs
  4. 11 0
      GameClient/Assets/Demo/Demo.cs.meta
  5. 0 1
      GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs
  6. 14 15
      GameClient/Assets/Game/HotUpdate/Platform/QDManager.cs
  7. 3 0
      GameClient/Assets/Game/HotUpdate/Platform/ShareSDK.meta
  8. 119 0
      GameClient/Assets/Game/HotUpdate/Platform/ShareSDK/QDShareManager.cs
  9. 3 0
      GameClient/Assets/Game/HotUpdate/Platform/ShareSDK/QDShareManager.cs.meta
  10. 1 0
      GameClient/Assets/Game/Launcher/Platform/QDManagerInit.cs
  11. 3 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK.meta
  12. 24 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/IShareSDKListener.cs
  13. 3 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/IShareSDKListener.cs.meta
  14. 71 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/QDShareManagerInit.cs
  15. 3 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/QDShareManagerInit.cs.meta
  16. BIN
      GameClient/Assets/Plugins/Android/ShareSDKU3D.jar
  17. 32 0
      GameClient/Assets/Plugins/Android/ShareSDKU3D.jar.meta
  18. 8 0
      GameClient/Assets/Plugins/Android/baseProjectTemplate.gradle
  19. 6 0
      GameClient/Assets/Plugins/Android/gradleTemplate.properties
  20. 7 0
      GameClient/Assets/Plugins/Android/gradleTemplate.properties.meta
  21. 81 0
      GameClient/Assets/Plugins/Android/launcherTemplate.gradle
  22. 7 0
      GameClient/Assets/Plugins/Android/launcherTemplate.gradle.meta
  23. 290 0
      GameClient/Assets/Resources/Scenes/GameLauncher.unity
  24. 8 0
      GameClient/Assets/ThirdParty/ShareSDK.meta
  25. 8 0
      GameClient/Assets/ThirdParty/ShareSDK/Android.meta
  26. 243 0
      GameClient/Assets/ThirdParty/ShareSDK/Android/AndroidImpl.cs
  27. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/Android/AndroidImpl.cs.meta
  28. 45 0
      GameClient/Assets/ThirdParty/ShareSDK/AndroidMobSDKImpl.cs
  29. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/AndroidMobSDKImpl.cs.meta
  30. 37 0
      GameClient/Assets/ThirdParty/ShareSDK/ContentType.cs
  31. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ContentType.cs.meta
  32. 3 0
      GameClient/Assets/ThirdParty/ShareSDK/GFG.meta
  33. 226 0
      GameClient/Assets/ThirdParty/ShareSDK/GFG/AbShareSDKHandler.cs
  34. 3 0
      GameClient/Assets/ThirdParty/ShareSDK/GFG/AbShareSDKHandler.cs.meta
  35. 741 0
      GameClient/Assets/ThirdParty/ShareSDK/MiniJSON.cs
  36. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/MiniJSON.cs.meta
  37. 105 0
      GameClient/Assets/ThirdParty/ShareSDK/MobSDK.cs
  38. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/MobSDK.cs.meta
  39. 32 0
      GameClient/Assets/ThirdParty/ShareSDK/MobSDKImpl.cs
  40. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/MobSDKImpl.cs.meta
  41. 107 0
      GameClient/Assets/ThirdParty/ShareSDK/PlatformType.cs
  42. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/PlatformType.cs.meta
  43. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ResponseState.cs
  44. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ResponseState.cs.meta
  45. 565 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareContent.cs
  46. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareContent.cs.meta
  47. 382 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDK.cs
  48. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDK.cs.meta
  49. 1218 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKDevInfo.cs
  50. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKDevInfo.cs.meta
  51. 155 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKImpl.cs
  52. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKImpl.cs.meta
  53. 58 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.cs
  54. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.cs.meta
  55. 57 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.prefab
  56. 7 0
      GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.prefab.meta
  57. 8 0
      GameClient/Assets/ThirdParty/ShareSDK/iOS.meta
  58. 240 0
      GameClient/Assets/ThirdParty/ShareSDK/iOS/iOSImpl.cs
  59. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/iOS/iOSImpl.cs.meta
  60. 57 0
      GameClient/Assets/ThirdParty/ShareSDK/iOSMobSDKImpl.cs
  61. 11 0
      GameClient/Assets/ThirdParty/ShareSDK/iOSMobSDKImpl.cs.meta
  62. 5 5
      GameClient/ProjectSettings/ProjectSettings.asset
  63. BIN
      GameClient/wjy.keystore

+ 8 - 0
GameClient/.idea/.idea.GameClient/.idea/indexLayout.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="UserContentModel">
+    <attachedFolders />
+    <explicitIncludes />
+    <explicitExcludes />
+  </component>
+</project>

+ 8 - 0
GameClient/Assets/Demo.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5385286e227ca4f5f8a440d911f5f233
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 800 - 0
GameClient/Assets/Demo/Demo.cs

@@ -0,0 +1,800 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using cn.sharesdk.unity3d;
+using LitJson;
+public class Demo : MonoBehaviour {
+
+	public GUISkin demoSkin;
+	public ShareSDK ssdk;
+	
+	public MobSDK mobsdk;
+	
+	// Use this for initialization
+	void Start ()
+	{	
+		ssdk = gameObject.GetComponent<ShareSDK>();
+		ssdk.authHandler = OnAuthResultHandler;
+		ssdk.shareHandler = OnShareResultHandler;
+		ssdk.showUserHandler = OnGetUserInfoResultHandler;
+		ssdk.getFriendsHandler = OnGetFriendsResultHandler;
+		ssdk.followFriendHandler = OnFollowFriendResultHandler;
+		ssdk.clientValidForAndroidHandler = onIsClientValidForAndroid;
+
+		mobsdk = gameObject.GetComponent<MobSDK>();
+        #if UNITY_ANDROID
+		//ShareSDKRestoreScene.setRestoreSceneListener(OnRestoreScene);
+		
+        #elif UNITY_IPHONE
+		mobsdk.getPolicy = OnFollowGetPolicy;
+        ssdk.wxRequestHandler = GetWXRequestTokenResultHandler;
+        //ShareSDKRestoreScene.setRestoreSceneListener(OnRestoreScene);
+        #endif
+
+    }
+
+	// Update is called once per frame
+	void Update () 
+	{
+		if (Input.GetKeyDown(KeyCode.Escape)) {
+			Application.Quit();
+		}
+	}
+	
+	void OnGUI ()
+	{
+
+		GUI.skin = demoSkin;
+		
+		float scale = 1.0f;
+
+		if (Application.platform == RuntimePlatform.IPhonePlayer)
+		{
+			scale = Screen.width / 320;
+		}
+		
+		//float btnWidth = 165 * scale;
+		float btnWidth= Screen.width / 5 * 2;
+        float btnWidth2 = btnWidth + 80 * scale;
+
+        float btnHeight = Screen.height / 25;
+		float btnTop = 30 * scale;
+		float btnGap = 20 * scale;
+		GUI.skin.button.fontSize = Convert.ToInt32(13 * scale);
+
+		if (GUI.Button(new Rect((Screen.width - btnGap) / 2 - btnWidth, btnTop, btnWidth, btnHeight), "Authorize"))
+		{
+			print(ssdk == null);
+
+#if UNITY_ANDROID
+		    ssdk.Authorize(PlatformType.SinaWeibo);
+#elif UNITY_IPHONE
+            ssdk.Authorize(PlatformType.Twitter);
+#endif
+		}
+
+		if (GUI.Button(new Rect((Screen.width - btnGap) / 2 + btnGap, btnTop, btnWidth, btnHeight), "Get User Info"))
+		{
+            //ssdk.GetUserInfo(PlatformType.Douyin);
+
+            //print("share result :" + ssdk.GetUserInfo(PlatformType.WeChat));
+			print("share result :" + ssdk.Authorize(PlatformType.WeChat));
+			
+			
+			//print("share result : " + ssdk.GetUserInfo(PlatformType.GooglePlus));
+        }
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnGap) / 2 - btnWidth, btnTop, btnWidth, btnHeight), "Show Share Menu"))
+		{
+            	ShareContent content = new ShareContent();
+
+            //	//(Android only) 隐藏九宫格里面不需要用到的平台(仅仅是不显示平台)
+            //	//(Android only) 也可以把jar包删除或者把Enabl属性e改成false(对应平台的全部功能将用不了)
+                String[] platfsList = {((int)PlatformType.Facebook).ToString(), ((int)PlatformType.TencentWeibo).ToString()};
+            	content.SetHidePlatforms (platfsList);
+
+            	content.SetText("this is a test string.");
+				content.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+				content.SetUrl("https://www.mob.com");
+            	content.SetTitle("test title");
+				content.SetDouyin_shareActionMode(1);
+
+            //(Android only) 针对Android绕过审核的多图分享,传图片String数组 
+            //String[] imageArray =  {"/sdcard/test.jpg", "http://f1.webshare.mob.com/dimgs/1c950a7b02087bf41bc56f07f7d3572c11dfcf36.jpg", "/sdcard/test.jpg"};
+            //content.SetImageArray (imageArray);
+
+            //content.SetTitleUrl("https://www.baidu.com/");
+            //content.SetSite("Test site params test test");
+            //content.SetSiteUrl("https://www.baidu.com/");
+            //content.SetUrl("https://www.baidu.com/");
+            //content.SetComment("test description");
+            //content.SetMusicUrl("http://i.y.qq.com/v8/playsong.html?hostuin=0&songid=&songmid=002x5Jje3eUkXT&_wv=1&source=qq&appshare=iphone&media_mid=002x5Jje3eUkXT");
+
+            content.SetShareType(ContentType.Image);
+
+			//不同平台分享不同内容
+			//ShareContent customizeShareParams = new ShareContent();
+			//customizeShareParams.SetText("Sina share content");
+			//customizeShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			//customizeShareParams.SetShareType(ContentType.Text);
+			//customizeShareParams.SetObjectID("SinaID");
+			//content.SetShareContentCustomize(PlatformType.SinaWeibo, customizeShareParams);
+
+			//KakaoTalk原生只支持分享链接
+			ShareContent kakaoTalkCustomizeShareParams = new ShareContent();
+			kakaoTalkCustomizeShareParams.SetUrl("http://www.mob.com");
+			kakaoTalkCustomizeShareParams.SetShareType(ContentType.Webpage);
+			kakaoTalkCustomizeShareParams.SetTemplateId("11820");
+			content.SetShareContentCustomize(PlatformType.KakaoTalk, kakaoTalkCustomizeShareParams);
+
+			//KakaoStory分享图片
+			ShareContent kakaoStoryCustomizeShareParams = new ShareContent();
+			kakaoStoryCustomizeShareParams.SetText("");
+			kakaoStoryCustomizeShareParams.SetTitle("http://www.mob.com");
+			kakaoStoryCustomizeShareParams.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			kakaoStoryCustomizeShareParams.SetUrl("");
+			kakaoStoryCustomizeShareParams.SetPermission("0");
+			kakaoStoryCustomizeShareParams.SetEnableShare(true);
+
+			Hashtable androidExecParams = new Hashtable();
+			androidExecParams["andParam1"] = "value1";
+			androidExecParams["andParam2"] = "value2";
+			kakaoStoryCustomizeShareParams.SetAndroidExecParam(androidExecParams);
+
+			Hashtable iOSExecParams = new Hashtable();
+			iOSExecParams["iosParam1"] = "value1";
+			iOSExecParams["iosParam2"] = "value2";
+			kakaoStoryCustomizeShareParams.SetIphoneExecParam(iOSExecParams);
+
+			kakaoStoryCustomizeShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.KakaoStory, kakaoStoryCustomizeShareParams);
+
+			//TikTok分享多图
+			String[] imageArray = { "http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg", "http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg" };
+			ShareContent tiktokCustomizeShareParams = new ShareContent();
+			tiktokCustomizeShareParams.SetImageArray(imageArray);
+			tiktokCustomizeShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.TikTok, tiktokCustomizeShareParams);
+			
+#if UNITY_IPHONE
+			//SnapChat分享图片
+			ShareContent snapChatShareParams = new ShareContent();
+			snapChatShareParams.SetTitle("https://www.mobtech.com");
+			snapChatShareParams.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			snapChatShareParams.setSnapStickerImage("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			snapChatShareParams.setSnapStickerAnimated(0);
+			snapChatShareParams.setSnapStickerRotation(0);
+			snapChatShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.SnapChat, snapChatShareParams);
+            //快手SDK-分享私信
+            ShareContent ksShareParams = new ShareContent();
+            ksShareParams.SetTitle("title");
+            ksShareParams.SetDesc("desc");
+            ksShareParams.SetLinkURL("https://www.mob.com");
+            ksShareParams.SetThumbImageUrl("http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png");
+            ksShareParams.SetExtraInfo("message");
+            ksShareParams.SetShareType(ContentType.Message);
+			content.SetShareContentCustomize(PlatformType.KuaiShou, ksShareParams);
+#endif
+
+			//抖音-分享系统视频
+			//ShareContent dyShareParams = new ShareContent();
+			//dyShareParams.SetAssetLocalIdsArray();  //此处应传入从相册取得的图片或者视频文件的Assetlocalidentifier集合
+			//dyShareParams.SetDouyinHashtag("hastag");
+			//Hashtable extraInfo = new Hashtable();
+			//extraInfo["iosParam1"] = "value1";
+			//extraInfo["iosParam2"] = "value2";
+			//dyShareParams.SetDouyin_extraInfo(extraInfo);
+			//dyShareParams.SetShareType(ContentType.Video);
+			//content.SetShareContentCustomize(PlatformType.Douyin, dyShareParams);
+
+			//Facebook分享图片
+			ShareContent fbShareParams = new ShareContent();
+			fbShareParams.SetText("text");
+			fbShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			fbShareParams.setFacebookShareType(FacebookShareType.Native);
+			fbShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.Facebook, fbShareParams);
+
+			//FacebookMessenger分享图片
+			ShareContent messShareParams = new ShareContent();
+			messShareParams.SetTitle("title");
+			messShareParams.SetUrl("http://www.mob.com");
+			messShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			messShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.FacebookMessenger, messShareParams);
+
+			//Instagram分享图片
+			ShareContent insShareParams = new ShareContent();
+			insShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			insShareParams.SetMenuX(0);
+			insShareParams.SetMenuY(0);
+			content.SetShareContentCustomize(PlatformType.Instagram, insShareParams);
+
+			//LinkedIn分享链接
+			ShareContent linkedInShareParams = new ShareContent();
+			linkedInShareParams.SetTitle("title");
+			linkedInShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			linkedInShareParams.SetUrl("http://www.mob.com");
+			linkedInShareParams.SetTitle("title");
+			linkedInShareParams.SetDesc("desc");
+			linkedInShareParams.SetShareType(ContentType.Webpage);
+			content.SetShareContentCustomize(PlatformType.LinkedIn, linkedInShareParams);
+
+
+			//Instapaper分享链接
+			ShareContent instapapaerShareParams = new ShareContent();
+			instapapaerShareParams.SetTitle("title");
+			instapapaerShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			instapapaerShareParams.SetUrl("http://www.mob.com");
+			instapapaerShareParams.SetTitle("title");
+			instapapaerShareParams.SetShareType(ContentType.Webpage);
+			content.SetShareContentCustomize(PlatformType.Instapaper, instapapaerShareParams);
+
+			//Pocket分享链接
+			ShareContent pocketShareParams = new ShareContent();
+			pocketShareParams.SetTitle("title");
+			pocketShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			pocketShareParams.SetUrl("http://www.mob.com");
+			pocketShareParams.SetTitle("title");
+			pocketShareParams.SetShareType(ContentType.Webpage);
+			content.SetShareContentCustomize(PlatformType.Pocket, pocketShareParams);
+
+			//有道分享图片
+			ShareContent youdaoShareParams = new ShareContent();
+			youdaoShareParams.SetText("text");
+			youdaoShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			youdaoShareParams.SetTitle("title");
+			youdaoShareParams.SetSource("MOB");
+			youdaoShareParams.SetAuthor("mob");
+			content.SetShareContentCustomize(PlatformType.YouDaoNote, youdaoShareParams);
+
+#if UNITY_IPHONE
+			//Dropbox分享图片
+			ShareContent dropboxShareParams = new ShareContent();
+			//dropboxShareParams.SetAttachmentPath("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			var files = System.IO.Directory.GetFiles(Application.dataPath, "cat.mp4", System.IO.SearchOption.AllDirectories);
+			string filePath = files[0];
+			dropboxShareParams.SetAttachmentPath(filePath);
+			content.SetShareContentCustomize(PlatformType.Dropbox, dropboxShareParams);
+#endif
+			//明道分享链接
+			ShareContent mingdaoShareParams = new ShareContent();
+			mingdaoShareParams.SetTitle("title");
+			mingdaoShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			mingdaoShareParams.SetUrl("http://www.mob.com");
+			mingdaoShareParams.SetTitle("title");
+			mingdaoShareParams.SetShareType(ContentType.Webpage);
+			content.SetShareContentCustomize(PlatformType.MingDao, mingdaoShareParams);
+
+
+			//绿洲分享图片
+			ShareContent oasisShareParams = new ShareContent();
+			oasisShareParams.SetTitle("title");
+			oasisShareParams.SetText("text");
+			oasisShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			oasisShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.Oasis, oasisShareParams);
+
+
+			//telegram分享图片
+			ShareContent telegramShareParams = new ShareContent();
+			telegramShareParams.SetText("text");
+			telegramShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+			telegramShareParams.SetShareType(ContentType.Image);
+			content.SetShareContentCustomize(PlatformType.Telegram, telegramShareParams);
+
+			////Tumblr分享视频
+			//ShareContent tumblrShareParams = new ShareContent();
+			//var files = System.IO.Directory.GetFiles(Application.dataPath, "cat.mp4", System.IO.SearchOption.AllDirectories);
+			//string filePath = files[0];
+			//tumblrShareParams.SetTitle("title");
+			//tumblrShareParams.SetMediaDataPath(filePath);
+			//tumblrShareParams.SetShareType(ContentType.Video);
+			//content.SetShareContentCustomize(PlatformType.Tumblr, tumblrShareParams);
+
+			//优先客户端分享
+			content.SetEnableClientShare(true);
+                
+            //使用微博API接口应用内分享 iOS only
+            //content.SetEnableSinaWeiboAPIShare(true);
+
+            //通过分享菜单分享
+            ssdk.ShowPlatformList (null, content, 100, 100);
+
+		}
+			
+		if (GUI.Button(new Rect((Screen.width - btnGap) / 2 + btnGap, btnTop, btnWidth, btnHeight), "Show Share View"))
+		{
+			ShareContent content = new ShareContent();
+			content.SetText("this is a test string.");
+			content.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			content.SetTitle("test title");
+			content.SetTitleUrl("http://www.mob.com");
+			content.SetSite("Mob-ShareSDK");
+			content.SetSiteUrl("http://www.mob.com");
+			content.SetUrl("http://www.mob.com");
+			content.SetComment("test description");
+			content.SetMusicUrl("http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3");
+			content.SetShareType(ContentType.Image);
+
+			ssdk.ShowShareContentEditor (PlatformType.SinaWeibo, content);
+		}
+#if UNITY_ANDROID
+
+#elif UNITY_IPHONE
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "Share With Activity"))
+		{
+			//系统分享示例
+			ShareContent content = new ShareContent();
+			content.SetText("this is a test string.");
+			content.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			content.SetTitle("test title");
+			content.SetTitleUrl("http://www.mob.com");
+			content.SetUrl("http://www.mob.com");
+			content.SetShareType(ContentType.Image);
+			ssdk.ShareContentWithActivity (PlatformType.WeChat, content);
+		}
+#endif
+
+
+
+		btnTop += btnHeight + 20 * scale;
+        if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "Share Content"))
+		{
+
+            //抖音-分享本地视频
+            ShareContent content = new ShareContent();
+			//var files = System.IO.Directory.GetFiles(Application.dataPath, "cat.mp4", System.IO.SearchOption.AllDirectories);
+			//string filePath = files[0];
+			//content.SetUrl(filePath);
+			//分享图片到IM
+			content.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");
+			content.SetShareType(ContentType.Image);
+			content.SetDouyin_shareActionMode(1);
+            ssdk.ShareContent(PlatformType.Douyin, content);
+
+            /*iOS Only*/
+
+            ////※单个平台的分享示例如下※:
+
+            ////调用公用参数构造方法的,通过如下方式,如TikTok分享多图
+            //String[] imageArray = { "http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg", "http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg" };
+            //content.SetImageArray(imageArray);
+            //content.SetShareType(ContentType.Image);
+            //ssdk.ShareContent(PlatformType.TikTok, content);
+
+
+            ////调用自定义的参数构造方法的,需要通过如下方式,如:KakaoTalk
+            //ShareContent customizeShareParams = new ShareContent();
+            //customizeShareParams.SetUrl("http://www.mob.com");
+            //customizeShareParams.SetShareType(ContentType.Webpage);
+            //customizeShareParams.SetTemplateId("11820");
+            //content.SetShareContentCustomize(PlatformType.KakaoTalk, customizeShareParams);
+            //ssdk.ShareContent(PlatformType.KakaoTalk, content);
+
+            ////快手SDK-分享私信
+            //ShareContent ksShareParams = new ShareContent();
+            //ksShareParams.SetTitle("title");
+            //ksShareParams.SetDesc("desc");
+            //ksShareParams.SetLinkURL("https://www.mob.com");
+            //ksShareParams.SetThumbImageUrl("http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png");
+            //ksShareParams.SetExtraInfo("message");
+            //ksShareParams.SetShareType(ContentType.Message);
+            //content.SetShareContentCustomize(PlatformType.KuaiShou, ksShareParams);
+            //ssdk.ShareContent(PlatformType.KuaiShou, content);
+
+            ////reddit分享链接
+            //ShareContent redditShareParams = new ShareContent();
+            //redditShareParams.SetText("text");
+            //redditShareParams.SetImageUrl("http://git.oschina.net/alexyu.yxj/MyTmpFiles/raw/master/kmk_pic_fld/small/107.JPG");
+            //redditShareParams.SetUrl("https://www.mob.com");
+            //redditShareParams.SetTitle("title");
+            //redditShareParams.SetShareType(ContentType.Webpage);
+            //content.SetShareContentCustomize(PlatformType.Reddit, redditShareParams);
+
+
+            // ShareContent content = new ShareContent();
+            // content.SetText("Test text");
+            // content.SetImageUrl("http://pic28.photophoto.cn/20130818/0020033143720852_b.jpg");
+            // ssdk.ShareContent (PlatformType.Twitter, content);
+
+        }
+
+		//if (GUI.Button(new Rect((Screen.width - btnGap) / 2 + btnGap, btnTop, btnWidth, btnHeight), "Get Friends SinaWeibo "))
+		//{
+		//获取新浪微博好友,第一页,每页15条数据
+		//print ("Click Btn Of Get Friends SinaWeibo");
+		//			ssdk.GetFriendList (PlatformType.SinaWeibo, 15, 0);
+		//ssdk.openMiniProgram("gh_afb25ac019c9","pages/index/index",0);
+		//}
+
+		btnTop += btnHeight + 20 * scale;
+        if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "Get Token "))
+		{
+			Hashtable authInfo = ssdk.GetAuthInfo (PlatformType.WeChat);			
+			print ("share result :");
+			print (MiniJSON.jsonEncode(authInfo));
+		}
+			
+		//if (GUI.Button(new Rect((Screen.width - btnGap) / 2 + btnGap , btnTop, btnWidth, btnHeight), "Close SSO Auth"))
+		//{
+			//ssdk.DisableSSO (true);			
+		//}
+
+		btnTop += btnHeight + 20 * scale;
+        if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "Remove Authorize "))
+		{
+			ssdk.CancelAuthorize (PlatformType.WeChat);			
+		}
+
+        //if (GUI.Button(new Rect((Screen.width - btnGap) / 2 + btnGap, btnTop, btnWidth, btnHeight), "Add Friend "))
+        //{
+        //关注新浪微博
+        //ssdk.AddFriend (PlatformType.SinaWeibo, "3189087725");			
+        //}
+
+        btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "ShareWithContentName(iOS only)"))
+		{
+			Hashtable customFields = new Hashtable ();
+			customFields["imgUrl"] = "http://ww1.sinaimg.cn/mw690/006dJESWgw1f6iyb8bzraj31kw0v67a2.jpg";
+			//根据配置文件分享【本接口功能仅暂时支持iOS】
+			ssdk.ShareWithContentName(PlatformType.SinaWeibo, "ShareSDK", customFields);		
+		}
+
+		//btnTop += btnHeight + 20 * scale;
+		//if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "ShowShareMenuWithContentName(iOS only)"))
+		//{
+		//	Hashtable customFields = new Hashtable ();
+		//	customFields["imgUrl"] = "http://ww1.sinaimg.cn/mw690/006dJESWgw1f6iyb8bzraj31kw0v67a2.jpg";
+		//	//根据配置文件展示分享菜单分享【本接口功能仅暂时支持iOS】
+		//	ssdk.ShowPlatformListWithContentName ("ShareSDK", customFields, null, 100, 100);
+		//}
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "ShowShareViewWithContentName(iOS only)"))
+		{
+			Hashtable customFields = new Hashtable ();
+			//根据配置文件展示编辑界面分享【本接口功能仅暂时支持iOS】
+			customFields["imgUrl"] = "http://ww1.sinaimg.cn/mw690/006dJESWgw1f6iyb8bzraj31kw0v67a2.jpg";
+			ssdk.ShowShareContentEditorWithContentName(PlatformType.SinaWeibo, "ShareSDK", customFields);		
+		}
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "SMS Authorize(Android only)"))
+		{
+			ssdk.Authorize(PlatformType.SMS);		
+		}
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "submitPolicyGrantResult"))
+		{
+			
+			Debug.Log("ssdk ======> " + ssdk);
+			Debug.Log("mobsdk ======> " + mobsdk);
+			
+			mobsdk.submitPolicyGrantResult(true);
+			Debug.Log("mobsdk submitPolicyGrantResult======> " + mobsdk.submitPolicyGrantResult(true).ToString());
+		}
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "getPrivacyPolicy"))
+		{
+			
+			Debug.Log("ssdk ======> " + ssdk);
+			Debug.Log("mobsdk ======> " + mobsdk);
+			#if UNITY_IPHONE
+            mobsdk.getPrivacyPolicy(true,mobsdk.getDeviceCurrentLanguage());
+#elif UNITY_ANDROID
+			mobsdk.getPrivacyPolicy(true, "en");
+			Debug.Log("mobsdk getPrivacyPolicy======> " + mobsdk.getPrivacyPolicy(true, "en"));
+#endif
+		}
+
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "Open wxMiniProgram(iOS only)"))
+		{
+#if UNITY_IPHONE
+			ssdk.openMiniProgram("gh_afb25ac019c9", "pages/index/index", 0);
+#elif UNITY_ANDROID
+#endif
+
+		}
+
+		btnTop += btnHeight + 20 * scale;
+		if (GUI.Button(new Rect((Screen.width - btnGap) / 2 - btnWidth, btnTop, btnWidth, btnHeight), "Share wxMiniProgram"))
+		{
+#if UNITY_IPHONE
+            ShareContent content = new ShareContent ();
+			content.SetTitle ("MiniProgram");
+			content.SetText ("test MiniProgram");
+			content.SetUrl("http://www.mob.com");
+			content.SetMiniProgramPath ("pages/index/index");
+			content.SetThumbImageUrl ("http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png");
+			content.SetMiniProgramHdThumbImage ("http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png");
+			content.SetMiniProgramUserName ("gh_afb25ac019c9");
+			content.SetMiniProgramWithShareTicket (true);
+            // iOS/Android 微信小程序的版本(0-正式,1-开发,2-体验)
+            content.SetMiniProgramType (0);
+			content.SetShareType (ContentType.MiniProgram);
+
+			ShareContent shareContent = new ShareContent ();
+			shareContent.SetShareContentCustomize (PlatformType.WeChat, content);
+			ssdk.ShareContent (PlatformType.WeChat, shareContent);
+#elif UNITY_ANDROID
+            ShareContent content = new ShareContent ();
+            content.SetTitle ("MiniProgram");
+            content.SetText ("test MiniProgram");
+            content.SetUrl("http://www.mob.com");
+            content.SetMiniProgramType (0);
+            content.SetMiniProgramUserName ("gh_52568203455c");
+            content.SetImageUrl("http://pic28.photophoto.cn/20130818/0020033143720852_b.jpg");
+            content.SetShareType (ContentType.MiniProgram);
+            
+            ShareContent shareContent = new ShareContent ();
+			shareContent.SetShareContentCustomize (PlatformType.WeChat, content);
+			ssdk.ShareContent (PlatformType.WeChat, shareContent);
+#endif
+		}
+
+      btnTop += btnHeight + 20 * scale;
+        if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "isClientValidForAndroid -QQ"))
+      {
+         ssdk.isClientValidForAndroid(PlatformType.QQ);
+      }
+
+
+      btnTop += btnHeight + 20 * scale;
+      if (GUI.Button(new Rect((Screen.width - btnGap) / 2 + btnGap, btnTop, btnWidth, btnHeight), "Share qqMiniProgram(iOS only)"))
+        {
+#if UNITY_IPHONE
+            ShareContent content = new ShareContent();
+            content.SetTitle("MiniProgram");
+            content.SetText("test MiniProgram");
+            content.SetUrl("http://www.mob.com");
+            content.SetThumbImageUrl("http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png");
+            content.SetMiniProgramPath("pages/index/index");
+            content.SetMiniProgramHdThumbImage("http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png");
+            content.SetMiniProgramAppID("1109762672");
+            content.SetMiniProgramWebpageUrl("www.qq.com");
+            //iOS/Android QQ小程序的类型,默认正式版(3),可选测试版(1)、预览版(4)
+            content.SetMiniProgramType(3);
+            content.SetShareType(ContentType.MiniProgram);
+
+            ShareContent shareContent = new ShareContent();
+            shareContent.SetShareContentCustomize(PlatformType.QQ, content);
+            ssdk.ShareContent(PlatformType.QQ, shareContent);
+
+#elif UNITY_ANDROID
+            //===============================================================
+            //when you test QQ miniprogram, you should use this params
+            //At the same time, the package name and signature should 
+            //correspond to the package name signature of the specific 
+            //QQ sharing small program applied in the background of tencent
+            //===============================================================
+            //ShareContent content = new ShareContent();
+            //content.SetTitle("MiniProgram");
+            //content.SetText("test MiniProgram");
+            //content.SetTitleUrl("http://www.mob.com");
+            //content.SetImageUrl("http://www.3wyu.com/wp-content/uploads/6e0eaf15gy1fvr5tnm2dfj20f108gtad.jpg");//必须为网络图片
+            //content.SetShareType(ContentType.QQ_MINI_PROGRAM);
+            //content.SetMiniProgramAppID("1108318575");
+            //content.SetMiniProgramPath("page/share/index.html?share_name=QQ%E9%9F%B3%E4%B9%90&share_key=5aIqFGg&from=disk");
+            //content.SetQQMiniProgramType("");
+
+            //ShareContent shareContent = new ShareContent();
+            //shareContent.SetShareContentCustomize(PlatformType.QQ, content);
+            //ssdk.ShareContent(PlatformType.QQ, shareContent);
+#endif
+		}
+
+		//btnTop += btnHeight + 20 * scale;
+		//if (GUI.Button(new Rect((Screen.width - btnWidth2) / 2, btnTop, btnWidth2, btnHeight), "Share Sina LinkCard"))
+		//{
+		//#if UNITY_IPHONE
+		//ShareContent content = new ShareContent();
+		//content.SetText("sina LinkCard");
+		//content.SetUrl("http://www.mob.com");
+		//content.SetImageUrl("http://www.mob.com/assets/images/ShareSDK_pic_1-09d293a6.png");//必须为网络图片
+		//content.SetSinaLinkCard(true);
+		//content.SetSinaCardTitle("这是Title");
+		//content.SetSinaCardSummary("这是Summary");
+		//content.SetShareType(ContentType.Webpage);
+
+		//ShareContent shareContent = new ShareContent();
+		//shareContent.SetShareContentCustomize(PlatformType.SinaWeibo, content);
+		//ssdk.ShareContent(PlatformType.SinaWeibo, shareContent);
+
+
+		//#elif UNITY_ANDROID
+		//JsonData jsonData = new JsonData();
+		//jsonData["url"] = "http://wx4.sinaimg.cn/large/006WfoFPly1fq0jo9svnaj30dw0dwdhv.jpg";
+		//jsonData["width"] = "120";
+		//jsonData["height"] = "120";
+
+
+		//ShareContent content = new ShareContent();
+		//content.SetText("sina LinkCard");
+		//content.SetSinaCardCreateAtAndroid("2019-01-24");
+		//content.SetSinaCardDisplayNameAndroid("displayName");
+		//content.SetSinaCardSummary("Summary");
+		//content.SetSinaCardURLAndroid("http://www.mob.com/");
+		//content.SetSinaCardTypeAndroid("webpage");
+		//content.SetSinaCardImageAndroid(jsonData);
+		//content.SetEnableClientShare(true);
+
+		//ShareContent shareContent = new ShareContent();
+		//shareContent.SetShareContentCustomize(PlatformType.SinaWeibo, content);
+
+		//ssdk.ShareContent(PlatformType.SinaWeibo, shareContent);
+		//#endif
+		//}
+	}
+	
+	void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+	{
+		if (state == ResponseState.Success)
+		{
+			if (result != null && result.Count > 0) {
+				print ("authorize success !" + "Platform :" + type + "result:" + MiniJSON.jsonEncode(result));
+			} else {
+				print ("authorize success !" + "Platform :" + type);
+			}
+		}
+		else if (state == ResponseState.Fail)
+		{
+#if UNITY_ANDROID
+			print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+		}
+		else if (state == ResponseState.Cancel) 
+		{
+			print ("cancel !");
+		}
+	}
+	
+	void OnGetUserInfoResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
+	{
+		if (state == ResponseState.Success)
+		{
+			print ("get user info result :");
+			print (MiniJSON.jsonEncode(result));
+            print ("AuthInfo:" + MiniJSON.jsonEncode (ssdk.GetAuthInfo (type)));
+			print ("Get userInfo success !Platform :" + type );
+		}
+		else if (state == ResponseState.Fail)
+		{
+#if UNITY_ANDROID
+			print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+		}
+		else if (state == ResponseState.Cancel) 
+		{
+			print ("cancel !");
+		}
+	}
+	
+	void OnShareResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
+	{
+		if (state == ResponseState.Success)
+		{
+			print ("share successfully - share result :");
+			print (MiniJSON.jsonEncode(result));
+		}
+		else if (state == ResponseState.Fail)
+		{
+#if UNITY_ANDROID
+			print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+		}
+		else if (state == ResponseState.Cancel) 
+		{
+			print ("cancel !");
+		}
+	}
+
+	void OnGetFriendsResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
+	{
+		if (state == ResponseState.Success)
+		{			
+			print ("get friend list result :");
+			print (MiniJSON.jsonEncode(result));
+		}
+		else if (state == ResponseState.Fail)
+		{
+#if UNITY_ANDROID
+			print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+		}
+		else if (state == ResponseState.Cancel) 
+		{
+			print ("cancel !");
+		}
+	}
+
+	void OnFollowFriendResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
+	{
+		if (state == ResponseState.Success)
+		{
+			print ("Follow friend successfully !");
+		}
+		else if (state == ResponseState.Fail)
+		{
+#if UNITY_ANDROID
+			print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+		}
+		else if (state == ResponseState.Cancel) 
+		{
+			print ("cancel !");
+		}
+	}
+
+   void onIsClientValidForAndroid (int reqID, ResponseState state, PlatformType type, Hashtable result)
+   {
+      if (state == ResponseState.Success)
+      {
+         print ("IsClientValidForAndroid successfully !");
+          print ("IsClientValidForAndroid:" + MiniJSON.jsonEncode (MiniJSON.jsonEncode(result)));
+      }
+      else if (state == ResponseState.Fail)
+      {
+         print ("IsClientValidForAndroid Fail !");
+      }
+      else if (state == ResponseState.Cancel)
+      {
+         print ("cancel !");
+      }
+   }
+
+    public static void OnRestoreScene(RestoreSceneInfo scene)
+    {
+        Hashtable customParams = scene.customParams; 
+        if (customParams != null)
+        {
+            Debug.Log("[sharesdk-unity-Demo]OnRestoreScen(). path:" + scene.path.ToString() + ", params:" + scene.customParams.toJson());
+        }
+        else
+        {
+            Debug.Log("[sharesdk-unity-Demo]OnRestoreScen(). path:" + scene.path.ToString() + ", params:null");
+        }
+
+        //根据scene开发者自己处理场景转换
+        //SceneManager.LoadScene("SceneA");
+    }
+
+
+#if UNITY_IPHONE
+
+    public static void GetWXRequestTokenResultHandler(String authcode, sendWXRequestToken send)
+    {
+        Debug.Log("[GetWXRequestTokenResultHandler:" + authcode);
+        send("11", "22");
+    }
+
+    public static void GetWXRefreshTokenResultHandler(String uid, sendWXRefreshToken send)
+    {
+        send("11");
+    }
+#endif
+    //隐私协议回调
+	public static void OnFollowGetPolicy(string url)
+	{
+		Debug.Log("[OnFollowGetPolicy:" + url);
+	}
+}

+ 11 - 0
GameClient/Assets/Demo/Demo.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e94ace64ea93b4d60831774b3bfedaaf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 1
GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs

@@ -10,7 +10,6 @@ namespace GFGGame
     {
         private void Awake()
         {
-            Debug.Log(1111111.ToString());
             //UniFramework
             // 初始化对象池系统
             UniPooling.Initalize();

+ 14 - 15
GameClient/Assets/Game/HotUpdate/Platform/QDManager.cs

@@ -1,20 +1,20 @@
-using ET;
+using ET;
 using UnityEngine;
 
 namespace GFGGame
 {
-
     public class QDManager
     {
         public bool isLogining;
         public string uid;
-        
+
         public static void Init()
         {
-            switch(LauncherConfig.ChannelId)
+            switch (LauncherConfig.ChannelId)
             {
                 default:
                     QDDouYouManager.Instance.Init();
+                    QDShareManager.Instance.Init();
                     break;
             }
         }
@@ -25,7 +25,7 @@ namespace GFGGame
             switch (LauncherConfig.ChannelId)
             {
                 case (int)ChannelID.TapTap:
-                    
+
                     break;
                 case (int)ChannelID.Test:
                     bool login = GameController.CheckLoginCache(true);
@@ -34,6 +34,7 @@ namespace GFGGame
                         ViewManager.Hide<ModalStatusView>();
                         ViewManager.Show<LoginInputView>();
                     }
+
                     break;
                 case (int)ChannelID.DouYouTest:
                     QDDouYouManager.Instance.Login();
@@ -49,7 +50,7 @@ namespace GFGGame
             switch (LauncherConfig.ChannelId)
             {
                 case (int)ChannelID.TapTap:
-                    
+
                     break;
                 case (int)ChannelID.Test:
 
@@ -68,7 +69,7 @@ namespace GFGGame
             switch (LauncherConfig.ChannelId)
             {
                 case (int)ChannelID.TapTap:
-                    
+
                     break;
                 case (int)ChannelID.Test:
 
@@ -88,7 +89,7 @@ namespace GFGGame
             switch (LauncherConfig.ChannelId)
             {
                 case (int)ChannelID.TapTap:
-                    
+
                     break;
                 case (int)ChannelID.Test:
 
@@ -107,7 +108,7 @@ namespace GFGGame
             switch (LauncherConfig.ChannelId)
             {
                 case (int)ChannelID.TapTap:
-                    
+
                     break;
                 case (int)ChannelID.Test:
 
@@ -130,13 +131,15 @@ namespace GFGGame
             {
                 PlayerPrefs.DeleteKey(GameConst.PASSWORD_LAST_LOGIN_KEY);
             }
+
             switch (LauncherConfig.ChannelId)
             {
                 default:
-                    if(!fromSdkLogoutCallback)
+                    if (!fromSdkLogoutCallback)
                     {
                         QDDouYouManager.Instance.Logout();
                     }
+
                     break;
             }
         }
@@ -159,11 +162,7 @@ namespace GFGGame
 
         public static bool IsTaptap
         {
-            get
-            {
-                return LauncherConfig.ChannelId == (int)ChannelID.TapTap;
-            }
+            get { return LauncherConfig.ChannelId == (int)ChannelID.TapTap; }
         }
-
     }
 }

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Platform/ShareSDK.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: bc4adb18ebb44800a28c1150b6f3e9d4
+timeCreated: 1717839408

+ 119 - 0
GameClient/Assets/Game/HotUpdate/Platform/ShareSDK/QDShareManager.cs

@@ -0,0 +1,119 @@
+using System.Collections;
+using cn.sharesdk.unity3d;
+using GFGGame.Launcher;
+using UnityEngine;
+
+namespace GFGGame
+{
+    public class QDShareManager : SingletonBase<QDShareManager>
+    {
+        public void Init()
+        {
+            QDShareManagerInit.Instance.shareSDKListener = new ShareSDKListener();
+        }
+
+        //回传用户隐私授权结果
+
+        /// <summary>
+        /// 构造分享信息 SetShareType
+        /// </summary>
+        /// <param name="text">分享的文字</param>
+        /// <param name="imageUrl">iOS平台,本地以及网络图片都使用此方法</param>
+        /// <param name="imageUrlArr">分享一组图片</param>
+        /// <param name="title">分享的标题</param>
+        /// <param name="titleUrl">标题的网络链接(QQ和QQ空间使用 )</param>
+        /// <param name="site"></param>
+        /// <param name="siteUrl"></param>
+        /// <param name="url">分享的链接(微信,微博,易信,Facebook等平台)</param>
+        /// <param name="comment"></param>
+        /// <param name="musicUrl"></param>
+        /// <param name="shareType">分享类型(微信,易信) ContentType</param>
+        /// <returns></returns>
+        public ShareContent NewStructureShareContent(string text, string imageUrl, string[] imageUrlArr, string title,
+            string titleUrl,
+            string site,
+            string siteUrl,
+            string url,
+            string comment,
+            string musicUrl, int shareType)
+        {
+            ShareContent content = new ShareContent();
+            content.SetText(text);
+            content.SetImageUrl(imageUrl);
+            content.SetImageArray(imageUrlArr);
+            content.SetTitle(title);
+            content.SetTitleUrl(titleUrl);
+            content.SetSite(site);
+            content.SetSiteUrl(siteUrl);
+            content.SetUrl(url);
+            content.SetComment(comment);
+            content.SetMusicUrl(musicUrl);
+            content.SetShareType(shareType);
+            return content;
+        }
+
+        /// <summary>
+        /// 回传用户隐私授权结果给sdk
+        /// </summary>
+        /// <param name="granted"></param>
+        public void SubmitPolicyGrantResult(bool granted = true)
+        {
+            QDShareManagerInit.Instance.mobsdk.submitPolicyGrantResult(granted);
+        }
+
+        //通过分享菜单分享 
+        public int ShowPlatformList(PlatformType[] platforms, ShareContent shareContent)
+        {
+            return QDShareManagerInit.Instance.shareSDK.ShowPlatformList(platforms, shareContent, 100, 100);
+        }
+
+        //直接通过编辑界面分享
+        public int ShowShareContentEditor(PlatformType platformType, ShareContent shareContent)
+        {
+            return QDShareManagerInit.Instance.shareSDK.ShowShareContentEditor(platformType, shareContent);
+        }
+
+        //直接分享
+        public int ShareContent(PlatformType platformType, ShareContent shareContent)
+        {
+            return QDShareManagerInit.Instance.shareSDK.ShowShareContentEditor(platformType, shareContent);
+        }
+    }
+
+    public class ShareSDKListener : IShareSDKListener
+    {
+        public void OnAuthResult(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            Debug.Log($"OnAuthResult");
+        }
+
+        public void OnGetUserInfoResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result)
+        {
+            Debug.Log($"OnGetUserInfoResult");
+        }
+
+        public void OnShareResult(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            Debug.Log($"OnShareResult");
+        }
+
+        public void OnGetFriendsResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result)
+        {
+            Debug.Log($"OnGetFriendsResult");
+        }
+
+        public void OnFollowFriendResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result)
+        {
+            Debug.Log($"OnFollowFriendResult");
+        }
+
+        public void OnIsClientValidForAndroidResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result)
+        {
+            Debug.Log($"OnFollowFriendResult");
+        }
+    }
+}

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Platform/ShareSDK/QDShareManager.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b74c0b4ef0234630ad3dcda87b3ef29a
+timeCreated: 1717839417

+ 1 - 0
GameClient/Assets/Game/Launcher/Platform/QDManagerInit.cs

@@ -10,6 +10,7 @@ namespace GFGGame.Launcher
             {
                 default:
                     QDDouYouManagerInit.Instance.InitSDK(QDDouYouManagerInit.Instance.GetAdId());
+                    QDShareManagerInit.Instance.InitSDK();
                     break;
             }
         }

+ 3 - 0
GameClient/Assets/Game/Launcher/Platform/ShareSDK.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c9cb7c77ebd34ca590c681fdc3a6695d
+timeCreated: 1717838023

+ 24 - 0
GameClient/Assets/Game/Launcher/Platform/ShareSDK/IShareSDKListener.cs

@@ -0,0 +1,24 @@
+using System.Collections;
+using cn.sharesdk.unity3d;
+
+namespace GFGGame.Launcher
+{
+    public interface IShareSDKListener
+    {
+        public void OnAuthResult(int reqID, ResponseState state, PlatformType type, Hashtable result);
+
+        public void OnGetUserInfoResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+        public void OnShareResult(int reqID, ResponseState state, PlatformType type, Hashtable result);
+
+        public void OnGetFriendsResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+        public void OnFollowFriendResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+        public void OnIsClientValidForAndroidResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+    }
+}

+ 3 - 0
GameClient/Assets/Game/Launcher/Platform/ShareSDK/IShareSDKListener.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f343722126ec4daf867c548368730e75
+timeCreated: 1717838042

+ 71 - 0
GameClient/Assets/Game/Launcher/Platform/ShareSDK/QDShareManagerInit.cs

@@ -0,0 +1,71 @@
+using System.Collections;
+using cn.sharesdk.unity3d;
+using UnityEngine;
+
+namespace GFGGame.Launcher
+{
+    public class QDShareManagerInit : SingletonBase<QDShareManagerInit>
+    {
+        public IShareSDKListener shareSDKListener;
+
+        public GameObject gameObject;
+
+        public MobSDK mobsdk;
+
+        public ShareSDK shareSDK;
+
+        public void InitSDK()
+        {
+            ShareSDKKHandler eventHandler = GameObject.Find("ShareSDKGameObject")
+                ?.GetComponent<ShareSDKKHandler>();
+            if (eventHandler == null)
+            {
+                gameObject = new GameObject("ShareSDKGameObject");
+                gameObject.AddComponent<ShareSDKKHandler>();
+                GameObject.DontDestroyOnLoad(gameObject);
+            }
+
+            GameObject mainCameraObject = GameObject.FindWithTag("MainCamera");
+            mobsdk = mainCameraObject.GetComponent<MobSDK>();
+            shareSDK = mainCameraObject.GetComponent<ShareSDK>();
+        }
+
+        public class ShareSDKKHandler : AbShareSDKHandler
+        {
+            public override void OnAuthResult(int reqID, ResponseState state, PlatformType type, Hashtable result)
+            {
+                QDShareManagerInit.Instance.shareSDKListener.OnAuthResult(reqID, state, type, result);
+            }
+
+            public override void OnGetUserInfoResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                QDShareManagerInit.Instance.shareSDKListener.OnGetUserInfoResult(reqID, state, type, result);
+            }
+
+            public override void OnShareResult(int reqID, ResponseState state, PlatformType type, Hashtable result)
+            {
+                QDShareManagerInit.Instance.shareSDKListener.OnShareResult(reqID, state, type, result);
+            }
+
+            public override void OnGetFriendsResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                QDShareManagerInit.Instance.shareSDKListener.OnGetFriendsResult(reqID, state, type, result);
+            }
+
+            public override void OnFollowFriendResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                QDShareManagerInit.Instance.shareSDKListener.OnFollowFriendResult(reqID, state, type, result);
+            }
+
+            public override void OnIsClientValidForAndroidResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                QDShareManagerInit.Instance.shareSDKListener
+                    .OnIsClientValidForAndroidResult(reqID, state, type, result);
+            }
+        }
+    }
+}

+ 3 - 0
GameClient/Assets/Game/Launcher/Platform/ShareSDK/QDShareManagerInit.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0e3b50e6054444febfcae364a9bdd607
+timeCreated: 1717838161

BIN
GameClient/Assets/Plugins/Android/ShareSDKU3D.jar


+ 32 - 0
GameClient/Assets/Plugins/Android/ShareSDKU3D.jar.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 1a995e0952a7d4839b616a51ec83deca
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
GameClient/Assets/Plugins/Android/baseProjectTemplate.gradle

@@ -5,6 +5,8 @@ allprojects {
         repositories {**ARTIFACTORYREPOSITORY**
             google()
             jcenter()
+            maven {
+            url "https://mvn.mob.com/android/"}
         }
 
         dependencies {
@@ -13,6 +15,8 @@ allprojects {
             // See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
             // To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
             classpath 'com.android.tools.build:gradle:3.4.3'
+            // Add MobSDK classpath dependency
+            classpath "com.mob.sdk:MobSDK2:+"
             **BUILD_SCRIPT_DEPS**
         }
     }
@@ -23,6 +27,10 @@ allprojects {
         flatDir {
             dirs "${project(':unityLibrary').projectDir}/libs"
         }
+         // Add MobSDK Maven repository
+        maven {
+            url "https://mvn.mob.com/android/"
+        }
     }
 }
 

+ 6 - 0
GameClient/Assets/Plugins/Android/gradleTemplate.properties

@@ -0,0 +1,6 @@
+org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
+org.gradle.parallel=true
+android.enableR8=**MINIFY_WITH_R_EIGHT**
+unityStreamingAssets=.unity3d**STREAMING_ASSETS**
+MobSDK.spEdition=FP
+**ADDITIONAL_PROPERTIES**

+ 7 - 0
GameClient/Assets/Plugins/Android/gradleTemplate.properties.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d5ebef3a01aae6b4c993d9268b3c4dee
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 81 - 0
GameClient/Assets/Plugins/Android/launcherTemplate.gradle

@@ -0,0 +1,81 @@
+// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
+
+apply plugin: 'com.android.application'
+
+dependencies {
+    implementation project(':unityLibrary')
+    }
+
+android {
+    compileSdkVersion **APIVERSION**
+    buildToolsVersion '**BUILDTOOLS**'
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    defaultConfig {
+        minSdkVersion **MINSDKVERSION**
+        targetSdkVersion **TARGETSDKVERSION**
+        applicationId '**APPLICATIONID**'
+        ndk {
+            abiFilters **ABIFILTERS**
+        }
+        versionCode **VERSIONCODE**
+        versionName '**VERSIONNAME**'
+    }
+
+    aaptOptions {
+        noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')
+        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
+    }**SIGN**
+
+    lintOptions {
+        abortOnError false
+    }
+
+    buildTypes {
+        debug {
+            minifyEnabled **MINIFY_DEBUG**
+            proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**
+            jniDebuggable true
+        }
+        release {
+            minifyEnabled **MINIFY_RELEASE**
+            proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG**
+        }
+    }**PACKAGING_OPTIONS****PLAY_ASSET_PACKS****SPLITS**
+**BUILT_APK_LOCATION**
+    bundle {
+        language {
+            enableSplit = false
+        }
+        density {
+            enableSplit = false
+        }
+        abi {
+            enableSplit = true
+        }
+    }
+}**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP**
+
+apply plugin: 'com.mob.sdk'
+
+MobSDK {
+    appKey "moba0b0c0d0"
+    appSecret "5713f0d88511f9f4cf100cade0610a34"
+    ShareSDK {
+        //第三方平台配置
+        devInfo {
+            Wechat {
+                appId "wx4868b35061f87885"
+                appSecret "64020361b8ec4c99936c0e3999a9f249"
+                withShareTicket true
+                bypassApproval false
+                enable true
+            }
+            //如果需要,添加其他第三方平台的配置
+        }
+    }
+}

+ 7 - 0
GameClient/Assets/Plugins/Android/launcherTemplate.gradle.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: af6edf4205bbfba41bc886e3210599d6
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 290 - 0
GameClient/Assets/Resources/Scenes/GameLauncher.unity

@@ -136,6 +136,8 @@ GameObject:
   - component: {fileID: 519420029}
   - component: {fileID: 519420030}
   - component: {fileID: 519420033}
+  - component: {fileID: 519420035}
+  - component: {fileID: 519420034}
   m_Layer: 0
   m_Name: Main Camera
   m_TagString: MainCamera
@@ -228,6 +230,294 @@ Behaviour:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 519420028}
   m_Enabled: 1
+--- !u!114 &519420034
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 519420028}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0117e2d36e70d4421ad96756610a5255, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  devInfo:
+    fourSquare:
+      Enable: 1
+      SortId: 20
+      ClientID: G0ZI20FM30SJAJTX2RIBGD05QV1NE2KVIM2SPXML2XUJNXEU
+      ClientSecret: 3XHQNSMMHIFBYOLWEPONNV4DOTCDBQH0AEMVGCBG0MZ32XNU
+      RedirectUrl: http://www.sharesdk.cn
+    sinaweibo:
+      Enable: 1
+      SortId: 4
+      AppKey: 568898243
+      AppSecret: 38a4f8204cc784f81f9f0daaf31e02e3
+      RedirectUrl: http://www.sharesdk.cn
+      ShareByAppClient: 1
+    tencentweibo:
+      Enable: 1
+      SortId: 3
+      AppKey: 801307650
+      AppSecret: ae36f4ee3946e1cbb98d6965b0b2ff5c
+      RedirectUri: http://www.sharesdk.cn
+    facebook:
+      Enable: 1
+      SortId: 8
+      ConsumerKey: 1412473428822331
+      ConsumerSecret: a42f4f3f867dc947b9ed6020c2e93558
+      RedirectUrl: https://www.baidu.com/
+      ShareByAppClient: true
+    twitter:
+      Enable: 1
+      SortId: 9
+      ConsumerKey: LRBM0H75rWrU9gNHvlEAA2aOy
+      ConsumerSecret: gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G
+      CallbackUrl: http://mob.com
+    email:
+      Enable: 1
+      SortId: 12
+    shortMessage:
+      Enable: 1
+      SortId: 13
+    douban:
+      Enable: 1
+      SortId: 14
+      ApiKey: 02e2cbe5ca06de5908a863b15e149b0b
+      Secret: 9f1e7b4f71304f2f
+      RedirectUri: http://www.sharesdk.cn
+    renren:
+      Enable: 1
+      SortId: 10
+      AppId: 226427
+      ApiKey: fc5b8aed373c4c27a05b712acba0f8c3
+      SecretKey: f29df781abdd4f49beca5a2194676ca4
+    googlePlus:
+      Enable: 1
+      SortId: 19
+      ClientID: 236300675100-am5pm8km7md1memjevq8rl9pg5c4s4b8.apps.googleusercontent.com
+      RedirectUrl: http://localhost
+      ShareByAppClient: 0
+      OfficialVersion: default
+    kaiXin:
+      Enable: 1
+      SortId: 11
+      AppKey: 358443394194887cee81ff5890870c7c
+      AppSecret: da32179d859c016169f66d90b6db2a23
+      RedirectUri: http://www.sharesdk.cn
+    pocket:
+      Enable: 1
+      SortId: 35
+      ConsumerKey: 32741-389c565043c49947ba7edf05
+    instagram:
+      Enable: 1
+      SortId: 26
+      ClientId: ff68e3216b4f4f989121aa1c2962d058
+      ClientSecret: 1b2e82f110264869b3505c3fe34e31a1
+      RedirectUri: http://sharesdk.cn
+    linkedIn:
+      Enable: 1
+      SortId: 18
+      ApiKey: ejo5ibkye3vo
+      SecretKey: cC7B2jpxITqPLZ5M
+      RedirectUrl: http://www.sharesdk.cn
+    tumblr:
+      Enable: 1
+      SortId: 23
+      OAuthConsumerKey: 2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM
+      SecretKey: 3Rt0sPFj7u2g39mEVB3IBpOzKnM3JnTtxX2bao2JKk4VV1gtNo
+      CallbackUrl: http://www.sharesdk.cn
+    youDao:
+      Enable: 1
+      SortId: 15
+      ConsumerKey: dcde25dca105bcc36884ed4534dab940
+      ConsumerSecret: d98217b4020e7f1874263795f44838fe
+      RedirectUri: http://www.sharesdk.cn
+      HostType: product
+    flickr:
+      Enable: 1
+      SortId: 22
+      ApiKey: 33d833ee6b6fca49943363282dd313dd
+      ApiSecret: 3a2c5b42a8fbb8bb
+      RedirectUri: http://www.sharesdk.cn
+    evernote:
+      Enable: 1
+      SortId: 17
+      ConsumerKey: sharesdk-7807
+      ConsumerSecret: d05bf86993836004
+      ShareByAppClient: 0
+    whatsApp:
+      Enable: 1
+      SortId: 33
+    line:
+      Enable: 1
+      SortId: 30
+      ChannelID: 1477692153
+      ChannelSecret: f30c036370f2e04ade71c52eef73a9af
+    dropbox:
+      Enable: 1
+      SortId: 24
+      AppKey: 7janx53ilz11gbs
+      AppSecret: c1hpx5fz6tzkm32
+    vkontakte:
+      Enable: 1
+      SortId: 25
+      ApplicationId: 3921561
+    pinterest:
+      Enable: 1
+      SortId: 21
+      ClientId: 1432928
+    mingdao:
+      Enable: 1
+      SortId: 29
+      AppKey: EEEE9578D1D431D3215D8C21BF5357E3
+      AppSecret: 5EDE59F37B3EFA8F65EEFB9976A4E933
+      RedirectUri: http://sharesdk.cn
+    kakaoTalk:
+      Enable: 1
+      SortId: 31
+      AppKey: 48d3f524e4a636b08d81b3ceb50f1003
+    kakaoStory:
+      Enable: 1
+      SortId: 32
+      AppKey: 48d3f524e4a636b08d81b3ceb50f1003
+    qq:
+      Enable: 1
+      SortId: 2
+      AppId: 1110451818
+      AppKey: aed9b0303e3ed1e27bae87c33761161d
+      ShareByAppClient: 1
+    qzone:
+      Enable: 1
+      SortId: 1
+      AppId: 1110451818
+      AppKey: ae36f4ee3946e1cbb98d6965b0b2ff5c
+      ShareByAppClient: 1
+    wechat:
+      Enable: 1
+      SortId: 5
+      AppId: wxf8452955e8de2e46
+      AppSecret: f9fcae1666d6e9e24cac0f7dd395433d
+      UserName: gh_038755574468@app
+      Path: /page/API/pages/share/share
+      BypassApproval: 0
+      WithShareTicket: 1
+      MiniprogramType: 0
+    wechatMoments:
+      Enable: 1
+      SortId: 6
+      AppId: wxf8452955e8de2e46
+      AppSecret: f9fcae1666d6e9e24cac0f7dd395433d
+      BypassApproval: 1
+    wechatFavorites:
+      Enable: 1
+      SortId: 7
+      AppId: wxf8452955e8de2e46
+      AppSecret: f9fcae1666d6e9e24cac0f7dd395433d
+    yixin:
+      Enable: 1
+      SortId: 27
+      AppId: yx0d9a9f9088ea44d78680f3274da1765f
+      BypassApproval: 1
+    yixinMoments:
+      Enable: 1
+      SortId: 28
+      AppId: yx0d9a9f9088ea44d78680f3274da1765f
+      BypassApproval: 1
+    facebookMessenger:
+      Enable: 1
+      SortId: 37
+      AppId: 107704292745179
+    aliSocial:
+      Enable: 1
+      SortId: 50
+      AppId: 2015072400185895
+    instapaper:
+      Enable: 1
+      SortId: 36
+      ConsumerKey: 4rDJORmcOcSAZL1YpqGHRI605xUvrLbOhkJ07yO0wWrYrc61FA
+      ConsumerSecret: GNr1GespOQbrm8nvd7rlUsyRQsIo3boIbMguAl9gfpdL0aKZWe
+    aliSocialMoments:
+      Enable: 1
+      SortId: 51
+      AppId: 2015072400185895
+    dingTalk:
+      Enable: 1
+    youtube:
+      Enable: 1
+      SortId: 53
+      ClientID: 370141748022-bicrnsjfiije93bvdt63dh3728m4shas.apps.googleusercontent.com
+      AppSecret: AIzaSyAO06g-0TDpHcsXXO918a7QE3Zdct2bB5E
+      RedirectUrl: http://localhost
+      ShareByAppClient: true
+    meiPai:
+      Enable: 1
+      SortId: 54
+      ClientID: 1089867596
+      ShareByAppClient: true
+    cmcc:
+      Enable: 1
+      SortId: 55
+      AppKey: 2D464D8BFCE73A44B4F9DF95A2FDBE1C
+      AppId: 300011860247
+    reddit:
+      Enable: 1
+      SortId: 56
+      AppKey: MExDxPuTCtFiRw
+      Id: 56
+      RedirectUrl: http://www.sharesdk.cn
+    telegram:
+      Enable: 1
+      SortId: 47
+      AppKey: 782826033
+      RedirectUrl: http://www.mob.com
+    eSurfing:
+      Enable: 1
+      SortId: 57
+      AppKey: 8148612606
+      AppSecret: mCltrhUqwshFa86egDTs0491ibaAulKA
+      RedirectUrl: http://www.sharesdk.cn
+    facebookAccount:
+      Enable: 1
+      SortId: 58
+      AppKey: 579465512480462
+      AppSecret: 8a6383652dd9f23fb0994f03d350d0ca
+      RedirectUrl: http://www.sharesdk.cn
+    wework:
+      Enable: 1
+      SortId: 60
+      AppKey: wwa21eaecf93f0e3ba
+      AppSecret: dW7e27P7Hc8NiYdRxnbTeOLgfI1ugR72e
+      AgentId: 1000012
+      Schema: wwautha21eaecf93f0e3ba000012
+    douyin:
+      Enable: 1
+      SortId: 59
+      AppKey: aw9ivykfjvi4hpwo
+      AppSecret: 42b4caa6bda60bd49f05f06d0a4956e1
+    oasis:
+      Enable: 1
+      SortId: 64
+      AppKey: 568898243
+      AppSecret: 38a4f8204cc784f81f9f0daaf31e02e3
+      RedirectUrl: http://www.sharesdk.cn
+    tiktok:
+      Enable: 1
+    kuaishou:
+      Enable: 1
+--- !u!114 &519420035
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 519420028}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5ddb254a1425545faa0fe46c651e248d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &1059812908
 GameObject:
   m_ObjectHideFlags: 0

+ 8 - 0
GameClient/Assets/ThirdParty/ShareSDK.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7944b7897d2e63048a970125614c9757
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
GameClient/Assets/ThirdParty/ShareSDK/Android.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6d4384a899f5a4f2a8b98bab43620fa8
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 243 - 0
GameClient/Assets/ThirdParty/ShareSDK/Android/AndroidImpl.cs

@@ -0,0 +1,243 @@
+using System;
+using System.Collections;
+using UnityEngine; 
+
+namespace cn.sharesdk.unity3d
+{
+#if UNITY_ANDROID
+	public class AndroidImpl : ShareSDKImpl
+	{
+		private AndroidJavaObject ssdk;
+
+		public AndroidImpl (GameObject go) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  AndroidImpl" );
+			try{
+				ssdk = new AndroidJavaObject("cn.sharesdk.unity3d.ShareSDKUtils", go.name, "_Callback");
+			} catch(Exception e) {
+				Console.WriteLine("{0} Exception caught.", e);
+			}
+		}
+
+		public override void InitSDK (String appKey) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  InitSDK === " + appKey);
+			if (ssdk != null) 
+			{			
+				ssdk.Call("initSDK", appKey);
+			}
+		}
+
+		public override void InitSDK (String appKey,String appSecret) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  InitSDK === " + appKey);
+			if (ssdk != null) 
+			{			
+				ssdk.Call("initSDK", appKey,appSecret);
+			}
+		}
+
+        public override void PrepareLoopShare()
+        {
+            Debug.Log("AndroidImpl  ===>>>  PrepareLoopShare ");
+            if (ssdk != null) 
+			{			
+				ssdk.Call("prepareLoopShare");
+			}
+        }
+
+        public override void setChannelId() 
+        {
+            Debug.Log("AndroidImpl  ===>>>  SetChannelId ");
+            if (ssdk != null) 
+			{			
+				ssdk.Call("setChannelId");
+			}
+        }
+
+		public override void SetPlatformConfig (Hashtable configs) 
+		{
+			String json = MiniJSON.jsonEncode(configs);
+			Debug.Log("AndroidImpl  ===>>>  SetPlatformConfig === " + json);
+			if (ssdk != null) 
+			{			
+				ssdk.Call("setPlatformConfig", json);
+			}
+		}
+
+		public override void Authorize (int reqID, PlatformType platform) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  Authorize" );
+			if (ssdk != null) 
+			{
+				ssdk.Call("authorize", reqID, (int)platform);
+			}
+		}
+
+		public override void CancelAuthorize (PlatformType platform) 
+		{
+			if (ssdk != null) 
+			{
+				ssdk.Call("removeAccount", (int)platform);
+			}
+		}
+
+		public override bool IsAuthorized (PlatformType platform) 
+		{
+			if (ssdk != null) 
+			{
+				return ssdk.Call<bool>("isAuthValid", (int)platform);
+			}
+			return false;
+		}
+
+		public override bool IsClientValid (PlatformType platform) 
+		{
+			if (ssdk != null) 
+			{
+				return ssdk.Call<bool>("isClientValid", (int)platform);
+			}
+			return false;
+		}
+
+		public override void GetUserInfo (int reqID, PlatformType platform) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  ShowUser" );
+			if (ssdk != null) 
+			{
+				ssdk.Call("showUser", reqID, (int)platform);
+			}
+		}
+
+		public override void ShareContent (int reqID, PlatformType platform, ShareContent content) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  ShareContent to one platform" );
+			ShareContent (reqID, new PlatformType[]{ platform }, content);
+		}
+
+		public override void ShareContent (int reqID, PlatformType[] platforms, ShareContent content) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  Share" );
+			if (ssdk != null) 
+			{
+				foreach (PlatformType platform in platforms)
+				{
+					ssdk.Call("shareContent", reqID, (int)platform, content.GetShareParamsStr());
+				}
+			}
+		}
+
+		public override void ShowPlatformList (int reqID, PlatformType[] platforms, ShareContent content, int x, int y) 
+		{
+			ShowShareContentEditor(reqID, 0, content);
+		}
+
+		public override void ShowShareContentEditor (int reqID, PlatformType platform, ShareContent content) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  OnekeyShare platform ===" + (int)platform );
+			if (ssdk != null) 
+			{
+				ssdk.Call("onekeyShare", reqID, (int)platform, content.GetShareParamsStr());
+			}
+		}
+		
+		public override void GetFriendList (int reqID, PlatformType platform, int count, int page) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  GetFriendList" );
+			if (ssdk != null) 
+			{
+				ssdk.Call("getFriendList", reqID, (int)platform, count, page);
+			}
+		}
+
+		public override void AddFriend (int reqID, PlatformType platform, String account)
+		{
+			Debug.Log("AndroidImpl  ===>>>  FollowFriend" );
+			if (ssdk != null) 
+			{
+				ssdk.Call("followFriend", reqID, (int)platform, account);
+			}
+		}
+
+		public override Hashtable GetAuthInfo (PlatformType platform) 
+		{
+			Debug.Log("AndroidImpl  ===>>>  GetAuthInfo" );
+			if (ssdk != null) 
+			{
+				String result = ssdk.Call<String>("getAuthInfo", (int)platform);
+				return (Hashtable) MiniJSON.jsonDecode(result);
+			}
+			return new Hashtable ();
+		}
+
+		public override void DisableSSO (Boolean disable)
+		{
+			Debug.Log("AndroidImpl  ===>>>  DisableSSOWhenAuthorize" );
+			if (ssdk != null) 
+			{
+				ssdk.Call("disableSSOWhenAuthorize", disable);
+			}
+		}
+		
+		public override void setDisappearShareToast (Boolean isShow)
+		{
+			Debug.Log("AndroidImpl  ===>>>  setDisappearShareToast" );
+			if (ssdk != null)
+			{
+				ssdk.Call("setDisappearShareToast", isShow);
+			}
+		}
+		
+
+		public override void ShareWithContentName (int reqId, PlatformType platform, string contentName, Hashtable customFields)
+		{
+			Debug.Log("#WARING : Do not support this feature in Android " );
+		}
+		
+		public override void ShowPlatformListWithContentName (int reqId, string contentName, Hashtable customFields, PlatformType[] platforms, int x, int y)
+		{
+			Debug.Log("#WARING : Do not support this feature in Android " );
+		}
+
+		public override void ShowShareContentEditorWithContentName (int reqId, PlatformType platform, string contentName, Hashtable customFields)
+		{
+			Debug.Log("#WARING : Do not support this feature in Android " );
+		}
+
+		public override bool openMiniProgram (String userName, String path, int miniProgramType)
+		{
+			// wait for implementation
+			return false;
+		}
+		
+		public override void getWXRequestToken()
+		{
+			Debug.Log("#WARING : Do not support this feature in Android" );
+		}
+		
+		public override void getWXRefreshToken()
+		{
+			Debug.Log("#WARING : Do not support this feature in Android" );
+		}
+		
+		public override void sendWXRefreshToken(String token)
+		{
+			Debug.Log("#WARING : Do not support this feature in Android" );
+		}
+		
+		public override void sendWXRequestToken(String uid, String token)
+		{
+			Debug.Log("#WARING : Do not support this feature in Android" );
+		}
+
+		public override void isClientValidForAndroid(int reqID,PlatformType platform)
+		{
+			Debug.Log("AndroidImpl  ===>>>  isClientValidForAndroid" );
+			if (ssdk != null)
+			{
+				ssdk.Call("isClientValidForAndroid",  reqID, (int)platform);
+			}
+		}
+	}
+#endif
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/Android/AndroidImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 194e0dfd517ce46e894563fc9d03568f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 45 - 0
GameClient/Assets/ThirdParty/ShareSDK/AndroidMobSDKImpl.cs

@@ -0,0 +1,45 @@
+using System;
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace cn.sharesdk.unity3d {
+#if UNITY_ANDROID
+	public class AndroidMobSDKImpl : MobSDKImpl {
+		private AndroidJavaObject sdk;
+		public AndroidMobSDKImpl(GameObject go) {
+			try {
+				sdk = new AndroidJavaObject("cn.sharesdk.unity3d.MobSDKUtils", go.name, "_PolicyGrantResultCallback");
+			} catch(Exception e) {
+				Console.WriteLine("{0} Exception caught.", e);
+			}
+		}
+
+		public override string getPrivacyPolicy(bool url, string language) {
+			// if (sdk != null) {
+			// 	return sdk.Call<string>("getPrivacyPolicy", url);
+			// }
+			return "No get privacypolicy content";
+		}
+
+		public override string getDeviceCurrentLanguage() {
+			return null;
+		}
+
+		public override Boolean submitPolicyGrantResult(bool granted) {
+			if (sdk != null) {
+				return sdk.Call<Boolean>("submitPolicyGrantResult", granted);
+			}
+			return false;
+		}
+
+		public override void setAllowDialog(bool allowDialog) {
+			sdk.Call("setAllowDialog", allowDialog);
+		}
+
+		public override void setPolicyUi(string backgroundColorRes, string positiveBtnColorRes, string negativeBtnColorRes) {
+			sdk.Call("setPolicyUi", backgroundColorRes, positiveBtnColorRes, negativeBtnColorRes);
+		}
+	}
+#endif
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/AndroidMobSDKImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8222b999bc5f34c03a12f581b9b85828
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 37 - 0
GameClient/Assets/ThirdParty/ShareSDK/ContentType.cs

@@ -0,0 +1,37 @@
+using System;
+
+namespace cn.sharesdk.unity3d {
+	public class ContentType {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public const int MiniProgram = 10;
+		public const int Message = 11;
+#endif
+
+#if UNITY_ANDROID
+		public const int MiniProgram = 11;
+		public const int QQ_MINI_PROGRAM = 15;
+#endif
+		public const int Auto = 0;
+		public const int Text = 1;
+		public const int Image = 2;
+		public const int Webpage = 4;
+		public const int Music = 5;
+		public const int Video = 6;
+		public const int App = 7;
+		public const int File = 8;
+		public const int Emoji = 9;
+		public const int OpenMiniProgram = 12;
+
+	}
+
+	public class FacebookShareType {
+		public const int Native = 1;
+		public const int ShareSheet = 2;
+		public const int Browser = 3;
+		public const int Web = 4;
+		public const int FeedBrowser = 5;
+		public const int FeedWeb = 6;
+
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ContentType.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eb73ee1c2b08f40ddb2191e039fc5427
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 3 - 0
GameClient/Assets/ThirdParty/ShareSDK/GFG.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 2f1ee8c65b5541c5978292e14d3c57cb
+timeCreated: 1717836397

+ 226 - 0
GameClient/Assets/ThirdParty/ShareSDK/GFG/AbShareSDKHandler.cs

@@ -0,0 +1,226 @@
+using System.Collections;
+using UnityEngine;
+
+namespace cn.sharesdk.unity3d
+{
+    public abstract class AbShareSDKHandler : MonoBehaviour
+    {
+        public ShareSDK ssdk;
+        public MobSDK mobsdk;
+
+        void Start()
+        {
+            ssdk = gameObject.GetComponent<ShareSDK>();
+            ssdk.authHandler = OnAuthResultHandler;
+            ssdk.shareHandler = OnShareResultHandler;
+            ssdk.showUserHandler = OnGetUserInfoResultHandler;
+            ssdk.getFriendsHandler = OnGetFriendsResultHandler;
+            ssdk.followFriendHandler = OnFollowFriendResultHandler;
+            ssdk.clientValidForAndroidHandler = OnIsClientValidForAndroidHandler;
+
+            mobsdk = gameObject.GetComponent<MobSDK>();
+        }
+
+        public abstract void OnAuthResult(int reqID, ResponseState state, PlatformType type, Hashtable result);
+
+        public abstract void OnGetUserInfoResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+        public abstract void OnShareResult(int reqID, ResponseState state, PlatformType type, Hashtable result);
+
+        public abstract void OnGetFriendsResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+        public abstract void OnFollowFriendResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+        public abstract void OnIsClientValidForAndroidResult(int reqID, ResponseState state, PlatformType type,
+            Hashtable result);
+
+
+        /// <summary>
+        /// 授权回调
+        /// </summary>
+        /// <param name="reqID"></param>
+        /// <param name="state"></param>
+        /// <param name="type"></param>
+        /// <param name="result"></param>
+        void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            string message = "";
+            if (state == ResponseState.Success)
+            {
+                if (result != null && result.Count > 0)
+                {
+                    print("authorize success !" + "Platform :" + type + "result:" + MiniJSON.jsonEncode(result));
+                }
+                else
+                {
+                    print("authorize success !" + "Platform :" + type);
+                }
+            }
+            else if (state == ResponseState.Fail)
+            {
+#if UNITY_ANDROID
+                print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+            }
+            else if (state == ResponseState.Cancel)
+            {
+                print("cancel !");
+            }
+
+            OnAuthResult(reqID, state, type, result);
+        }
+
+        /// <summary>
+        /// 指定获取用户信息的回调-->应该是调用 ssdk.GetUserInfo(PlatformType.SinaWeibo); 之后得到这个回调
+        /// </summary>
+        /// <param name="reqID"></param>
+        /// <param name="state"></param>
+        /// <param name="type"></param>
+        /// <param name="result"></param>
+        void OnGetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            if (state == ResponseState.Success)
+            {
+                print("get user info result :");
+                print(MiniJSON.jsonEncode(result));
+                print("AuthInfo:" + MiniJSON.jsonEncode(ssdk.GetAuthInfo(type)));
+                print("Get userInfo success !Platform :" + type);
+            }
+            else if (state == ResponseState.Fail)
+            {
+#if UNITY_ANDROID
+                print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+            }
+            else if (state == ResponseState.Cancel)
+            {
+                print("cancel !");
+            }
+
+            OnGetUserInfoResult(reqID, state, type, result);
+        }
+
+        /// <summary>
+        /// 应该是分享回调
+        /// </summary>
+        /// <param name="reqID"></param>
+        /// <param name="state"></param>
+        /// <param name="type"></param>
+        /// <param name="result"></param>
+        void OnShareResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            if (state == ResponseState.Success)
+            {
+                print("share successfully - share result :");
+                print(MiniJSON.jsonEncode(result));
+            }
+            else if (state == ResponseState.Fail)
+            {
+#if UNITY_ANDROID
+                print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+            }
+            else if (state == ResponseState.Cancel)
+            {
+                print("cancel !");
+            }
+
+            OnShareResult(reqID, state, type, result);
+        }
+
+        /// <summary>
+        /// 获取好友列表结果
+        /// </summary>
+        /// <param name="reqID"></param>
+        /// <param name="state"></param>
+        /// <param name="type"></param>
+        /// <param name="result"></param>
+        void OnGetFriendsResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            if (state == ResponseState.Success)
+            {
+                print("get friend list result :");
+                print(MiniJSON.jsonEncode(result));
+            }
+            else if (state == ResponseState.Fail)
+            {
+#if UNITY_ANDROID
+                print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+            }
+            else if (state == ResponseState.Cancel)
+            {
+                print("cancel !");
+            }
+
+            OnGetFriendsResult(reqID, state, type, result);
+        }
+
+
+        /// <summary>
+        /// 关注好友回调
+        /// </summary>
+        /// <param name="reqID"></param>
+        /// <param name="state"></param>
+        /// <param name="type"></param>
+        /// <param name="result"></param>
+        void OnFollowFriendResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            if (state == ResponseState.Success)
+            {
+                print("Follow friend successfully !");
+            }
+            else if (state == ResponseState.Fail)
+            {
+#if UNITY_ANDROID
+                print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
+#elif UNITY_IPHONE
+			print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
+#endif
+            }
+            else if (state == ResponseState.Cancel)
+            {
+                print("cancel !");
+            }
+
+            OnFollowFriendResult(reqID, state, type, result);
+        }
+
+        /// <summary>
+        /// 关于客户端对Android处理程序有效吗
+        /// </summary>
+        /// <param name="reqID"></param>
+        /// <param name="state"></param>
+        /// <param name="type"></param>
+        /// <param name="result"></param>
+        void OnIsClientValidForAndroidHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
+        {
+            if (state == ResponseState.Success)
+            {
+                print("IsClientValidForAndroid successfully !");
+                print("IsClientValidForAndroid:" + MiniJSON.jsonEncode(MiniJSON.jsonEncode(result)));
+            }
+            else if (state == ResponseState.Fail)
+            {
+                print("IsClientValidForAndroid Fail !");
+            }
+            else if (state == ResponseState.Cancel)
+            {
+                print("cancel !");
+            }
+
+            OnIsClientValidForAndroidResult(reqID, state, type, result);
+        }
+    }
+}

+ 3 - 0
GameClient/Assets/ThirdParty/ShareSDK/GFG/AbShareSDKHandler.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 56bc1cd10d1842b2ac80ff8f96379673
+timeCreated: 1717836413

+ 741 - 0
GameClient/Assets/ThirdParty/ShareSDK/MiniJSON.cs

@@ -0,0 +1,741 @@
+using System;
+using System.Collections;
+using System.Text;
+using System.Collections.Generic;
+
+
+/* Based on the JSON parser from 
+ * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html
+ * 
+ * I simplified it so that it doesn't throw exceptions
+ * and can be used in Unity iPhone with maximum code stripping.
+ */
+/// <summary>
+/// This class encodes and decodes JSON strings.
+/// Spec. details, see http://www.json.org/
+/// 
+/// JSON uses Arrays and Objects. These correspond here to the datatypes ArrayList and Hashtable.
+/// All numbers are parsed to doubles.
+/// </summary>
+
+
+public class MiniJSON
+{
+	private const int TOKEN_NONE = 0;
+	private const int TOKEN_CURLY_OPEN = 1;
+	private const int TOKEN_CURLY_CLOSE = 2;
+	private const int TOKEN_SQUARED_OPEN = 3;
+	private const int TOKEN_SQUARED_CLOSE = 4;
+	private const int TOKEN_COLON = 5;
+	private const int TOKEN_COMMA = 6;
+	private const int TOKEN_STRING = 7;
+	private const int TOKEN_NUMBER = 8;
+	private const int TOKEN_TRUE = 9;
+	private const int TOKEN_FALSE = 10;
+	private const int TOKEN_NULL = 11;
+	private const int BUILDER_CAPACITY = 2000;
+
+	/// <summary>
+	/// On decoding, this value holds the position at which the parse failed (-1 = no error).
+	/// </summary>
+	protected static int lastErrorIndex = -1;
+	protected static string lastDecode = "";
+
+
+	/// <summary>
+	/// Parses the string json into a value
+	/// </summary>
+	/// <param name="json">A JSON string.</param>
+	/// <returns>An ArrayList, a Hashtable, a double, a string, null, true, or false</returns>
+	public static object jsonDecode( string json )
+	{
+		// save the string for debug information
+		MiniJSON.lastDecode = json;
+
+		if( json != null )
+		{
+			char[] charArray = json.ToCharArray();
+			int index = 0;
+			bool success = true;
+			object value = MiniJSON.parseValue( charArray, ref index, ref success );
+
+			if( success )
+				MiniJSON.lastErrorIndex = -1;
+			else
+				MiniJSON.lastErrorIndex = index;
+
+			return value;
+		}
+		else
+		{
+			return null;
+		}
+	}
+
+
+	/// <summary>
+	/// Converts a Hashtable / ArrayList / Dictionary(string,string) object into a JSON string
+	/// </summary>
+	/// <param name="json">A Hashtable / ArrayList</param>
+	/// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
+	public static string jsonEncode( object json )
+	{
+		var builder = new StringBuilder( BUILDER_CAPACITY );
+		var success = MiniJSON.serializeValue( json, builder );
+
+		return ( success ? builder.ToString() : null );
+	}
+
+
+	/// <summary>
+	/// On decoding, this function returns the position at which the parse failed (-1 = no error).
+	/// </summary>
+	/// <returns></returns>
+	public static bool lastDecodeSuccessful()
+	{
+		return ( MiniJSON.lastErrorIndex == -1 );
+	}
+
+
+	/// <summary>
+	/// On decoding, this function returns the position at which the parse failed (-1 = no error).
+	/// </summary>
+	/// <returns></returns>
+	public static int getLastErrorIndex()
+	{
+		return MiniJSON.lastErrorIndex;
+	}
+
+
+	/// <summary>
+	/// If a decoding error occurred, this function returns a piece of the JSON string 
+	/// at which the error took place. To ease debugging.
+	/// </summary>
+	/// <returns></returns>
+	public static string getLastErrorSnippet()
+	{
+		if( MiniJSON.lastErrorIndex == -1 )
+		{
+			return "";
+		}
+		else
+		{
+			int startIndex = MiniJSON.lastErrorIndex - 5;
+			int endIndex = MiniJSON.lastErrorIndex + 15;
+			if( startIndex < 0 )
+				startIndex = 0;
+
+			if( endIndex >= MiniJSON.lastDecode.Length )
+				endIndex = MiniJSON.lastDecode.Length - 1;
+
+			return MiniJSON.lastDecode.Substring( startIndex, endIndex - startIndex + 1 );
+		}
+	}
+
+
+	#region Parsing
+
+	protected static Hashtable parseObject( char[] json, ref int index )
+	{
+		Hashtable table = new Hashtable();
+		int token;
+
+		// {
+		nextToken( json, ref index );
+
+		bool done = false;
+		while( !done )
+		{
+			token = lookAhead( json, index );
+			if( token == MiniJSON.TOKEN_NONE )
+			{
+				return null;
+			}
+			else if( token == MiniJSON.TOKEN_COMMA )
+			{
+				nextToken( json, ref index );
+			}
+			else if( token == MiniJSON.TOKEN_CURLY_CLOSE )
+			{
+				nextToken( json, ref index );
+				return table;
+			}
+			else
+			{
+				// name
+				string name = parseString( json, ref index );
+				if( name == null )
+				{
+					return null;
+				}
+
+				// :
+				token = nextToken( json, ref index );
+				if( token != MiniJSON.TOKEN_COLON )
+					return null;
+
+				// value
+				bool success = true;
+				object value = parseValue( json, ref index, ref success );
+				if( !success )
+					return null;
+
+				table[name] = value;
+			}
+		}
+
+		return table;
+	}
+
+
+	protected static ArrayList parseArray( char[] json, ref int index )
+	{
+		ArrayList array = new ArrayList();
+
+		// [
+		nextToken( json, ref index );
+
+		bool done = false;
+		while( !done )
+		{
+			int token = lookAhead( json, index );
+			if( token == MiniJSON.TOKEN_NONE )
+			{
+				return null;
+			}
+			else if( token == MiniJSON.TOKEN_COMMA )
+			{
+				nextToken( json, ref index );
+			}
+			else if( token == MiniJSON.TOKEN_SQUARED_CLOSE )
+			{
+				nextToken( json, ref index );
+				break;
+			}
+			else
+			{
+				bool success = true;
+				object value = parseValue( json, ref index, ref success );
+				if( !success )
+					return null;
+
+				array.Add( value );
+			}
+		}
+
+		return array;
+	}
+
+
+	protected static object parseValue( char[] json, ref int index, ref bool success )
+	{
+		switch( lookAhead( json, index ) )
+		{
+		case MiniJSON.TOKEN_STRING:
+			return parseString( json, ref index );
+		case MiniJSON.TOKEN_NUMBER:
+			return parseNumber( json, ref index );
+		case MiniJSON.TOKEN_CURLY_OPEN:
+			return parseObject( json, ref index );
+		case MiniJSON.TOKEN_SQUARED_OPEN:
+			return parseArray( json, ref index );
+		case MiniJSON.TOKEN_TRUE:
+			nextToken( json, ref index );
+			return Boolean.Parse( "TRUE" );
+		case MiniJSON.TOKEN_FALSE:
+			nextToken( json, ref index );
+			return Boolean.Parse( "FALSE" );
+		case MiniJSON.TOKEN_NULL:
+			nextToken( json, ref index );
+			return null;
+		case MiniJSON.TOKEN_NONE:
+			break;
+		}
+
+		success = false;
+		return null;
+	}
+
+
+	protected static string parseString( char[] json, ref int index )
+	{
+		string s = "";
+		char c;
+
+		eatWhitespace( json, ref index );
+
+		// "
+		c = json[index++];
+
+		bool complete = false;
+		while( !complete )
+		{
+			if( index == json.Length )
+				break;
+
+			c = json[index++];
+			if( c == '"' )
+			{
+				complete = true;
+				break;
+			}
+			else if( c == '\\' )
+			{
+				if( index == json.Length )
+					break;
+
+				c = json[index++];
+				if( c == '"' )
+				{
+					s += '"';
+				}
+				else if( c == '\\' )
+				{
+					s += '\\';
+				}
+				else if( c == '/' )
+				{
+					s += '/';
+				}
+				else if( c == 'b' )
+				{
+					s += '\b';
+				}
+				else if( c == 'f' )
+				{
+					s += '\f';
+				}
+				else if( c == 'n' )
+				{
+					s += '\n';
+				}
+				else if( c == 'r' )
+				{
+					s += '\r';
+				}
+				else if( c == 't' )
+				{
+					s += '\t';
+				}
+				else if( c == 'u' )
+				{
+					int remainingLength = json.Length - index;
+					if( remainingLength >= 4 )
+					{
+						char[] unicodeCharArray = new char[4];
+						Array.Copy( json, index, unicodeCharArray, 0, 4 );
+
+						uint codePoint = UInt32.Parse( new string( unicodeCharArray ), System.Globalization.NumberStyles.HexNumber );
+
+						// convert the integer codepoint to a unicode char and add to string
+						s += Char.ConvertFromUtf32( (int)codePoint );
+
+						// skip 4 chars
+						index += 4;
+					}
+					else
+					{
+						break;
+					}
+				}
+			}
+			else
+			{
+				s += c;
+			}
+
+		}
+
+		if( !complete )
+			return null;
+
+		return s;
+	}
+
+
+	protected static double parseNumber( char[] json, ref int index )
+	{
+		eatWhitespace( json, ref index );
+
+		int lastIndex = getLastIndexOfNumber( json, index );
+		int charLength = ( lastIndex - index ) + 1;
+		char[] numberCharArray = new char[charLength];
+
+		Array.Copy( json, index, numberCharArray, 0, charLength );
+		index = lastIndex + 1;
+		return Double.Parse( new string( numberCharArray ) ); // , CultureInfo.InvariantCulture);
+	}
+
+
+	protected static int getLastIndexOfNumber( char[] json, int index )
+	{
+		int lastIndex;
+		for( lastIndex = index; lastIndex < json.Length; lastIndex++ )
+			if( "0123456789+-.eE".IndexOf( json[lastIndex] ) == -1 )
+			{
+				break;
+			}
+		return lastIndex - 1;
+	}
+
+
+	protected static void eatWhitespace( char[] json, ref int index )
+	{
+		for( ; index < json.Length; index++ )
+			if( " \t\n\r".IndexOf( json[index] ) == -1 )
+			{
+				break;
+			}
+	}
+
+
+	protected static int lookAhead( char[] json, int index )
+	{
+		int saveIndex = index;
+		return nextToken( json, ref saveIndex );
+	}
+
+
+	protected static int nextToken( char[] json, ref int index )
+	{
+		eatWhitespace( json, ref index );
+
+		if( index == json.Length )
+		{
+			return MiniJSON.TOKEN_NONE;
+		}
+
+		char c = json[index];
+		index++;
+		switch( c )
+		{
+		case '{':
+			return MiniJSON.TOKEN_CURLY_OPEN;
+		case '}':
+			return MiniJSON.TOKEN_CURLY_CLOSE;
+		case '[':
+			return MiniJSON.TOKEN_SQUARED_OPEN;
+		case ']':
+			return MiniJSON.TOKEN_SQUARED_CLOSE;
+		case ',':
+			return MiniJSON.TOKEN_COMMA;
+		case '"':
+			return MiniJSON.TOKEN_STRING;
+		case '0':
+		case '1':
+		case '2':
+		case '3':
+		case '4': 
+		case '5':
+		case '6':
+		case '7':
+		case '8':
+		case '9':
+		case '-': 
+			return MiniJSON.TOKEN_NUMBER;
+		case ':':
+			return MiniJSON.TOKEN_COLON;
+		}
+		index--;
+
+		int remainingLength = json.Length - index;
+
+		// false
+		if( remainingLength >= 5 )
+		{
+			if( json[index] == 'f' &&
+				json[index + 1] == 'a' &&
+				json[index + 2] == 'l' &&
+				json[index + 3] == 's' &&
+				json[index + 4] == 'e' )
+			{
+				index += 5;
+				return MiniJSON.TOKEN_FALSE;
+			}
+		}
+
+		// true
+		if( remainingLength >= 4 )
+		{
+			if( json[index] == 't' &&
+				json[index + 1] == 'r' &&
+				json[index + 2] == 'u' &&
+				json[index + 3] == 'e' )
+			{
+				index += 4;
+				return MiniJSON.TOKEN_TRUE;
+			}
+		}
+
+		// null
+		if( remainingLength >= 4 )
+		{
+			if( json[index] == 'n' &&
+				json[index + 1] == 'u' &&
+				json[index + 2] == 'l' &&
+				json[index + 3] == 'l' )
+			{
+				index += 4;
+				return MiniJSON.TOKEN_NULL;
+			}
+		}
+
+		return MiniJSON.TOKEN_NONE;
+	}
+
+	#endregion
+
+
+	#region Serialization
+
+	protected static bool serializeObjectOrArray( object objectOrArray, StringBuilder builder )
+	{
+		if( objectOrArray is Hashtable )
+		{
+			return serializeObject( (Hashtable)objectOrArray, builder );
+		}
+		else if( objectOrArray is ArrayList )
+		{
+			return serializeArray( (ArrayList)objectOrArray, builder );
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+
+	protected static bool serializeObject( Hashtable anObject, StringBuilder builder )
+	{
+		builder.Append( "{" );
+
+		IDictionaryEnumerator e = anObject.GetEnumerator();
+		bool first = true;
+		while( e.MoveNext() )
+		{
+			string key = e.Key.ToString();
+			object value = e.Value;
+
+			if( !first )
+			{
+				builder.Append( ", " );
+			}
+
+			serializeString( key, builder );
+			builder.Append( ":" );
+			if( !serializeValue( value, builder ) )
+			{
+				return false;
+			}
+
+			first = false;
+		}
+
+		builder.Append( "}" );
+		return true;
+	}
+
+
+	protected static bool serializeDictionary( Dictionary<string,string> dict, StringBuilder builder )
+	{
+		builder.Append( "{" );
+
+		bool first = true;
+		foreach( var kv in dict )
+		{
+			if( !first )
+				builder.Append( ", " );
+
+			serializeString( kv.Key, builder );
+			builder.Append( ":" );
+			serializeString( kv.Value, builder );
+
+			first = false;
+		}
+
+		builder.Append( "}" );
+		return true;
+	}
+
+
+	protected static bool serializeArray( ArrayList anArray, StringBuilder builder )
+	{
+		builder.Append( "[" );
+
+		bool first = true;
+		for( int i = 0; i < anArray.Count; i++ )
+		{
+			object value = anArray[i];
+
+			if( !first )
+			{
+				builder.Append( ", " );
+			}
+
+			if( !serializeValue( value, builder ) )
+			{
+				return false;
+			}
+
+			first = false;
+		}
+
+		builder.Append( "]" );
+		return true;
+	}
+
+
+	protected static bool serializeValue( object value, StringBuilder builder )
+	{
+		//Type t = value.GetType();
+		//UnityEngine.Debug.Log("type: " + t.ToString() + " isArray: " + t.IsArray);
+
+		if( value == null )
+		{
+			builder.Append( "null" );
+		}
+		else if( value.GetType().IsArray )
+		{
+			serializeArray( new ArrayList( (ICollection)value ), builder );
+		}
+		else if( value is string )
+		{
+			serializeString( (string)value, builder );
+		}
+		else if( value is Char )
+		{
+			serializeString( Convert.ToString( (char)value ), builder );
+		}
+		else if( value is decimal )
+		{
+			serializeString( Convert.ToString( (decimal)value ), builder );
+		}
+		else if( value is Hashtable )
+		{
+			serializeObject( (Hashtable)value, builder );
+		}
+		else if( value is Dictionary<string,string> )
+		{
+			serializeDictionary( (Dictionary<string,string>)value, builder );
+		}
+		else if( value is ArrayList )
+		{
+			serializeArray( (ArrayList)value, builder );
+		}
+		else if( ( value is Boolean ) && ( (Boolean)value == true ) )
+		{
+			builder.Append( "true" );
+		}
+		else if( ( value is Boolean ) && ( (Boolean)value == false ) )
+		{
+			builder.Append( "false" );
+		}
+		else if( value.GetType().IsPrimitive )
+		{
+			serializeNumber( Convert.ToDouble( value ), builder );
+		}
+		else
+		{
+			return false;
+		}
+
+		return true;
+	}
+
+
+	protected static void serializeString( string aString, StringBuilder builder )
+	{
+		builder.Append( "\"" );
+
+		char[] charArray = aString.ToCharArray();
+		for( int i = 0; i < charArray.Length; i++ )
+		{
+			char c = charArray[i];
+			if( c == '"' )
+			{
+				builder.Append( "\\\"" );
+			}
+			else if( c == '\\' )
+			{
+				builder.Append( "\\\\" );
+			}
+			else if( c == '\b' )
+			{
+				builder.Append( "\\b" );
+			}
+			else if( c == '\f' )
+			{
+				builder.Append( "\\f" );
+			}
+			else if( c == '\n' )
+			{
+				builder.Append( "\\n" );
+			}
+			else if( c == '\r' )
+			{
+				builder.Append( "\\r" );
+			}
+			else if( c == '\t' )
+			{
+				builder.Append( "\\t" );
+			}
+			else
+			{
+				int codepoint = Convert.ToInt32( c );
+				if( ( codepoint >= 32 ) && ( codepoint <= 126 ) )
+				{
+					builder.Append( c );
+				}
+				else
+				{
+					builder.Append( "\\u" + Convert.ToString( codepoint, 16 ).PadLeft( 4, '0' ) );
+				}
+			}
+		}
+
+		builder.Append( "\"" );
+	}
+
+
+	protected static void serializeNumber( double number, StringBuilder builder )
+	{
+		builder.Append( Convert.ToString( number ) ); // , CultureInfo.InvariantCulture));
+	}
+
+	#endregion
+
+}
+
+
+
+#region Extension methods
+
+public static class MiniJsonExtensions
+{
+	public static string toJson( this Hashtable obj )
+	{
+		return MiniJSON.jsonEncode( obj );
+	}
+
+
+	public static string toJson( this Dictionary<string,string> obj )
+	{
+		return MiniJSON.jsonEncode( obj );
+	}
+
+
+	public static ArrayList arrayListFromJson( this string json )
+	{
+		return MiniJSON.jsonDecode( json ) as ArrayList;
+	}
+
+
+	public static Hashtable hashtableFromJson( this string json )
+	{
+		return MiniJSON.jsonDecode( json ) as Hashtable;
+	}
+}
+
+#endregion
+
+

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/MiniJSON.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 90fc7d0449aeb4b5e93ac066c5966f50
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 105 - 0
GameClient/Assets/ThirdParty/ShareSDK/MobSDK.cs

@@ -0,0 +1,105 @@
+using System;
+using System.IO;
+using System.Text;
+using UnityEngine;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace cn.sharesdk.unity3d {
+	public class MobSDK : MonoBehaviour
+	{
+
+#if UNITY_IPHONE || UNITY_IOS
+		public getPolicyHandle getPolicy;
+#endif
+		public MobSDKImpl sdk;
+		public OnSubmitPolicyGrantResultCallback onSubmitPolicyGrantResultCallback;
+		public delegate void OnSubmitPolicyGrantResultCallback(bool success);
+
+		void Awake() {
+			#if UNITY_IPHONE
+				sdk = new iOSMobSDKImpl(gameObject);
+			#elif UNITY_ANDROID
+				sdk = new AndroidMobSDKImpl(gameObject);
+			#endif
+		}
+
+		private void _PolicyGrantResultCallback(bool success) {
+			onSubmitPolicyGrantResultCallback(success);
+		}
+
+		/// <summary>
+		/// 提交用户授权结果给MobSDK
+		/// <summary>
+		public Boolean submitPolicyGrantResult(bool granted) {
+			return sdk.submitPolicyGrantResult(granted);
+		}
+
+		/// <summary>
+		/// 是否允许展示二次确认框
+		/// <summary>
+		public void setAllowDialog(bool allowDialog) {
+			sdk.setAllowDialog(allowDialog);
+		}
+
+		/// <summary>
+		/// 设置二次确认框样式
+		/// <summary>
+		public void setPolicyUi(string backgroundColorRes, string positiveBtnColorRes, string negativeBtnColorRes) {
+			sdk.setPolicyUi(backgroundColorRes, positiveBtnColorRes, negativeBtnColorRes);
+		}
+#if UNITY_IPHONE || UNITY_IOS
+		public delegate void getPolicyHandle(string content);
+
+		public void getPrivacyPolicy(bool url, string language) {
+			sdk.getPrivacyPolicy(url, language);
+		}
+
+		public string getDeviceCurrentLanguage() {
+			return sdk.getDeviceCurrentLanguage();
+		}
+
+		private void _Callback(string data) {
+			if (data == null) {
+				return;
+			}
+
+			Hashtable res = (Hashtable)MiniJSON.jsonDecode(data);
+			if (res == null || res.Count <= 0) {
+				return;
+			}
+
+			int status = Convert.ToInt32(res["status"]);
+			int action = Convert.ToInt32(res["action"]);
+
+			switch(status) {
+				case 1: {
+					Console.WriteLine(data);
+					Hashtable resp = (Hashtable) res["res"];
+					if (action == 1) {
+						if (getPolicy != null) {
+							getPolicy((string)resp["url"]);
+						}
+					}
+					break;
+				}
+				case 2: {
+					break;
+				}
+				case 3: {
+					break;
+				}
+			}
+		}
+#endif
+
+#if UNITY_ANDROID
+		public string getPrivacyPolicy(bool url, string language) {
+			return sdk.getPrivacyPolicy(url, language);
+		}
+#endif
+
+		//回调定义
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/MobSDK.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ddb254a1425545faa0fe46c651e248d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 32 - 0
GameClient/Assets/ThirdParty/ShareSDK/MobSDKImpl.cs

@@ -0,0 +1,32 @@
+using System;
+
+namespace cn.sharesdk.unity3d {
+	public abstract class MobSDKImpl
+	{
+		/// <summary>
+		/// 获取MobSDK隐私协议内容, url为true时返回MobTech隐私协议链接,false返回协议的内容
+		/// <summary>
+		public abstract string getPrivacyPolicy(bool url, string language);
+
+		/// <summary>
+		/// 获取设备语言
+		/// <summary>
+		public abstract string getDeviceCurrentLanguage();
+
+		/// <summary>
+		/// 提交用户授权结果给MobSDK
+		/// <summary>
+		public abstract Boolean submitPolicyGrantResult(bool granted);
+
+		/// <summary>
+		/// 是否允许展示二次确认框
+		/// <summary>
+		public abstract void setAllowDialog(bool allowDialog);
+
+		/// <summary>
+		/// 设置二次确认框样式
+		/// <summary>
+		public abstract void setPolicyUi(string backgroundColorRes, string positiveBtnColorRes, string negativeBtnColorRes);
+
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/MobSDKImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3ed91361db7c4499a8ba79f0c8997a08
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 107 - 0
GameClient/Assets/ThirdParty/ShareSDK/PlatformType.cs

@@ -0,0 +1,107 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18408
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using System;
+namespace cn.sharesdk.unity3d
+{
+	/// <summary>
+	/// Platform type.
+	/// </summary>
+#if UNITY_IPHONE
+	public enum HostType {
+		sandbox = 1,
+		china = 2,
+		product = 3
+	}
+#endif
+	
+	public enum PlatformType
+	{
+		Unknown = 0,
+		SinaWeibo = 1,			//Sina Weibo         
+		TencentWeibo = 2,		//Tencent Weibo          
+		DouBan = 5,				//Dou Ban           
+		QZone = 6, 				//QZone           
+		Renren = 7,				//Ren Ren           
+		Kaixin = 8,				//Kai Xin          
+		Pengyou = 9,			//Friends          
+		Facebook = 10,			//Facebook         
+		Twitter = 11,			//Twitter         
+		Evernote = 12,			//Evernote        
+		Foursquare = 13,		//Foursquare      
+		GooglePlus = 14,		//Google+       
+		Instagram = 15,			//Instagram      
+		LinkedIn = 16,			//LinkedIn       
+		Tumblr = 17,			//Tumblr         
+		Mail = 18, 				//Mail          
+		SMS = 19,				//SMS           
+		Print = 20, 			//Print       
+		Copy = 21,				//Copy             
+		WeChat = 22,		    //WeChat Friends    
+		WeChatMoments = 23,	    //WeChat WechatMoments   
+		QQ = 24,				//QQ              
+		Instapaper = 25,		//Instapaper       
+		Pocket = 26,			//Pocket           
+		YouDaoNote = 27, 		//You Dao Note           
+		Pinterest = 30, 		//Pinterest    
+		Flickr = 34,			//Flickr          
+		Dropbox = 35,			//Dropbox          
+		VKontakte = 36,			//VKontakte       
+		WeChatFavorites = 37,	//WeChat Favorited        
+		YiXinSession = 38, 		//YiXin Session   
+		YiXinTimeline = 39,		//YiXin Timeline   
+		YiXinFav = 40,			//YiXin Favorited  
+		MingDao = 41,          	//明道
+		Line = 42,             	//Line
+		WhatsApp = 43,         	//Whats App
+		KakaoTalk = 44,         //KakaoTalk
+		KakaoStory = 45,        //KakaoStory 
+		FacebookMessenger = 46, //FacebookMessenger
+        Telegram = 47,         //Telegram
+        Bluetooth = 48,         //Bluetooth
+		AliSocial = 50,            //AliSocial
+		AliSocialMoments = 51,     //AliSocialMoments
+		Dingding = 52,			//DingTalk 钉钉
+		Youtube = 53,			//youtube
+		MeiPai = 54,            //美拍
+        CMCC = 55,               //中国移动
+        Reddit = 56,            //Reddit
+        ESurfing = 57,          //天翼
+        FacebookAccount = 58,              //FacebookAccount
+        Douyin = 59,            //抖音
+        WeWork = 60,            //企业微信
+        Oasis = 64,             //绿洲
+		KuaiShou = 68,         //快手
+		TikTok = 70,           //TikTok
+		
+#if UNITY_ANDROID
+		KakaoPlatform = 44,    
+		EvernoteInternational = 12,
+		WechatPlatform = 22,  
+		QQPlatform = 24,
+		YixinPlatform = 38,
+       
+#elif UNITY_IPHONE
+        //Reddit = 56,			//Reddit
+        Apple = 61,            //苹果登录
+        SnapChat = 66,         //Snapchat
+		WatermelonVideo = 69,   //西瓜视频
+		YixinPlatform = 994,    //Yixin series
+		KakaoPlatform = 995,    //Kakao series
+		EvernoteInternational = 996,//Evernote InternationaL Edition
+		WechatPlatform = 997,   //Wechat Series
+		QQPlatform = 998,		//QQ Series
+		DingdingShare = 999,    //钉钉share
+#endif
+         
+
+    }
+
+}
+

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/PlatformType.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ecf655427e0e947c49757c713fbcbac4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ResponseState.cs

@@ -0,0 +1,11 @@
+using System;
+
+namespace cn.sharesdk.unity3d {
+	public enum ResponseState {
+		Begin = 0,
+		Success = 1,
+		Fail = 2,
+		Cancel = 3,
+		BeginUPLoad = 4
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ResponseState.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ea4ad3d983c61461b96fd381918b77ba
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 565 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareContent.cs

@@ -0,0 +1,565 @@
+using System;
+using LitJson;
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace cn.sharesdk.unity3d {
+	public class ShareContent : MonoBehaviour
+	{
+		Hashtable shareParams = new Hashtable();
+		Hashtable customizeShareParams = new Hashtable();
+		public void SetHidePlatforms(String[] hidePlatformList) {
+			shareParams["hidePlatformList"] = String.Join (",", hidePlatformList);
+		}
+
+		public void SetTitle(string title) {
+			shareParams["title"] = title;
+		}
+
+		public void SetText(string text) {
+			shareParams["text"] = text;
+		}
+
+		public void SetUrl(string url) {
+			shareParams["url"] = url;
+		}
+
+		public void SetImagePath(string imagePath) {
+			#if UNITY_ANDROID
+				shareParams["imagePath"] = imagePath;
+			#elif UNITY_IPHONE
+				shareParams["imageUrl"] = imagePath;
+			#endif
+		}
+
+		public void SetImageUrl(string imageUrl) {
+			shareParams["imageUrl"] = imageUrl;
+		}
+
+		public void SetImageArray(string[] imageArray) {
+			shareParams["imageArray"] = String.Join(",", imageArray);
+		}
+
+		public void SetShareType(int shareType) {
+			#if UNITY_ANDROID
+				if (shareType == 0) {
+					shareType = 1;
+				} else if(shareType == 10) {
+					shareType = 11;
+				}
+			#endif
+			shareParams["shareType"] = shareType;
+		}
+
+		public void SetTitleUrl(string titleUrl) {
+			shareParams["titleUrl"] = titleUrl;
+		}
+
+		public void SetComment(string comment) {
+			shareParams["comment"] = comment;
+		}
+
+		public void SetSite(String site) {
+			shareParams["site"] = site;
+		}
+
+		public void SetSiteUrl(string siteUrl) {
+			shareParams["siteUrl"] = siteUrl;
+		}
+
+		public void SetAddress(string address) {
+			shareParams["address"] = address;
+		}
+
+		public void SetFilePath(string filePath) {
+			shareParams["filePath"] = filePath;
+		}
+
+		public void SetMusicUrl(string musicUrl) {
+			shareParams["musicUrl"] = musicUrl;
+		}
+
+		public void SetLatitude(string latitude) {
+			shareParams["latitude"] = latitude;
+		}
+
+		public void SetLongitude(string longitude) {
+			shareParams["longitude"] = longitude;
+		}
+
+		public void SetSource(string source) {
+			#if UNITY_ANDROID
+				shareParams["url"] = source;
+			#elif UNITY_IPHONE
+				shareParams["source"] = source;
+			#endif
+		}
+
+		public void SetAuthor(string author) {
+			#if UNITY_ANDROID
+				shareParams["address"] = author;
+			#elif UNITY_IPHONE
+				shareParams["author"] = author;
+			#endif
+		}
+
+		public void SetSnapAttachmentUrl(string attachmentUrl) {
+			shareParams["attachmentUrl"] = attachmentUrl;
+		}
+
+		public void setSnapStickerAnimated(int stickerAnimated) {
+			#if UNITY_IPHONE
+				shareParams["stickerAnimated"] = stickerAnimated;
+			#endif
+		}
+
+		public void setSnapStickerRotation(float rotation) {
+			#if UNITY_IPHONE
+				shareParams["stickerRotation"] = rotation;
+			#endif
+		}
+
+		public void setSnapStickerImage(string image) {
+			#if UNITY_IPHONE
+				shareParams["stickerImage"] = image;
+			#endif
+		}
+
+		public void SetLinkURL(string linkUrl) {
+			shareParams["linkUrl"] = linkUrl;
+		}
+
+		public void SetOpenID(string openID) {
+			shareParams["openID"] = openID;
+		}
+
+		public void SetReceiverOpenID(string receiverOpenID) {
+			shareParams["receiverOpenID"] = receiverOpenID;
+		}
+
+		public void SetLocalIdentifier(string localIdentifier) {
+			shareParams["localIdentifier"] = localIdentifier;
+		}
+
+		public void SetTagsArray(string[] tagsArray) {
+			shareParams["tagsArray"] = tagsArray;
+		}
+
+		public void SetExtraInfo(string extraInfo) {
+			shareParams["extraInfo"] = extraInfo;
+		}
+
+		public void SetSafetyLevel(int safetyLevel) {
+			shareParams["safetyLevel"] = safetyLevel;
+		}
+
+		public void SetContentType(int contentType) {
+			shareParams["contentType"] = contentType;
+		}
+
+		public void SetHidden(bool hidden) {
+			shareParams["hidden"] = hidden;
+		}
+
+		public void SetIsPublic(bool isPublic) {
+			shareParams["isPublic"] = isPublic;
+		}
+
+		public void SetIsFriend(bool isFriend) {
+			shareParams["isFriend"] = isFriend;
+		}
+
+		public void SetIsFamily(bool isFamily) {
+			shareParams["isFamily"] = isFamily;
+		}
+
+		public void SetFriendsOnly(bool friendsOnly) {
+			#if UNITY_ANDROID
+				shareParams["isFriend"] = friendsOnly;
+			#elif UNITY_IPHONE
+				shareParams["friendsOnly"] = friendsOnly;
+			#endif
+		}
+
+		public void SetGroupID(string groupID) {
+			shareParams["groupID"] = groupID;
+		}
+
+		public void SetAudioPath(string audioPath) {
+			#if UNITY_ANDROID
+				shareParams["filePath"] = audioPath;
+			#elif UNITY_IPHONE
+				shareParams["audioPath"] = audioPath;
+			#endif
+		}
+
+		public void SetVideoPath(string videoPath) {
+			#if UNITY_ANDROID
+				shareParams["filePath"] = videoPath;
+			#elif UNITY_IPHONE
+				shareParams["videoPath"] = videoPath;
+			#endif
+		}
+
+		public void SetNotebook(string notebook) {
+			shareParams["notebook"] = notebook;
+		}
+
+		public void SetTags(string tags) {
+			shareParams["tags"] = tags;
+		}
+
+		public void SetPrivateStatus(int status) {
+			shareParams["privateStatus"] = status;
+		}
+
+		public void SetObjectID(string objectId) {
+			shareParams["objectId"] = objectId;
+		}
+
+		public void SetAlbumID(string albumId) {
+			shareParams["AlbumID"] = albumId;
+		}
+
+		public void SetEmotionPath(string emotionPath) {
+			shareParams["emotionPath"] = emotionPath;
+		}
+
+		public void SetExtInfoPath(string extInfoPath) {
+			shareParams["extInfoPath"] = extInfoPath;
+		}
+
+		public void SetSourceFileExtension(string sourceFileExtension) {
+			shareParams["sourceFileExtension"] = sourceFileExtension;
+		}
+
+		public void SetAssetLocalIds(string assetLocalIds) {
+			shareParams["assetLocalIds"] = assetLocalIds;
+		}
+
+		public void SetAssetLocalIdsArray(string[] assetLocalIdsArray) {
+			shareParams["asset_localIds"] = assetLocalIdsArray;
+		}
+
+		public void SetDouyinHashtag(string douyin_hashtag) {
+			shareParams["douyin_hashtag"] = douyin_hashtag;
+		}
+
+		public void SetTiktokHashtag(string tiktok_hashtag) {
+			shareParams["tiktok_hashtag"] = tiktok_hashtag;
+		}
+
+		public void SetTiktok_extraInfo(Dictionary<string,string> tiktok_extraInfo) {
+			shareParams["tiktok_extraInfo"] = tiktok_extraInfo;
+		}
+
+		public void SetDouyin_shareActionMode(int shareActionMode) {
+			shareParams["shareActionMode"] = shareActionMode;
+		}
+
+		public void SetDouyin_extraInfo(Dictionary<string, string> douyin_extraInfo) {
+			shareParams["douyin_extraInfo"] = douyin_extraInfo;
+		}
+
+		public void SetSourceFilePath(string sourceFilePath) {
+			shareParams["sourceFilePath"] = sourceFilePath;
+		}
+
+		public void SetThumbImageUrl(string thumbImageUrl) {
+			shareParams["thumbImageUrl"] = thumbImageUrl;
+		}
+
+		public void SetUrlDescription(string urlDescription) {
+			shareParams["urlDescription"] = urlDescription;
+		}
+
+		public void SetBoard(string SetBoard) {
+			shareParams["SetBoard"] = SetBoard;
+		}
+
+		public void SetMenuX(float menuX) {
+			shareParams["menuX"] = menuX;
+		}
+
+		public void SetMenuY(float menuY) {
+			shareParams["menuY"] = menuY;
+		}
+
+		public void SetVisibility(string visibility) {
+			shareParams["visibility"] = visibility;
+		}
+
+		public void SetBlogName(string blogName) {
+			shareParams["blogName"] = blogName;
+		}
+
+		public void SetMediaDataPath(string mediaDataPath) {
+			shareParams["mediaDataPath"] = mediaDataPath;
+		}
+
+		public void SetRecipients(string recipients) {
+			shareParams["recipients"] = recipients;
+		}
+
+		public void SetCCRecipients(string ccRecipients) {
+			shareParams["ccRecipients"] = ccRecipients;
+		}
+
+		public void SetBCCRecipients(string bccRecipients) {
+			shareParams["bccRecipients"] = bccRecipients;
+		}
+
+		public void SetAttachmentPath(string attachmentPath) {
+			shareParams["attachmentPath"] = attachmentPath;
+		}
+
+		public void SetDesc(string desc) {
+			shareParams["desc"] = desc;
+		}
+
+		public void SetIsPrivateFromSource(bool isPrivateFromSource) {
+			shareParams["isPrivateFromSource"] = isPrivateFromSource;
+		}
+
+		public void SetResolveFinalUrl(bool resolveFinalUrl) {
+			shareParams["resolveFinalUrl"] = resolveFinalUrl;
+		}
+
+		public void SetFolderId(int folderId) {
+			shareParams["folderId"] = folderId;
+		}
+
+		public void SetTweetID(string tweetID) {
+			shareParams["tweetID"] = tweetID;
+		}
+
+		public void SetToUserID(string toUserID) {
+			shareParams["toUserID"] = toUserID;
+		}
+
+		public void SetPermission(string permission) {
+			shareParams["permission"] = permission;
+		}
+
+		public void SetEnableShare(bool enableShare) {
+			shareParams["enableShare"] = enableShare;
+		}
+
+		public void SetImageWidth(float imageWidth) {
+			shareParams["imageWidth"] = imageWidth;
+		}
+
+		public void SetImageHeight(float imageHeight) {
+			shareParams["imageHeight"] = imageHeight;
+		}
+
+		public void SetAppButtonTitle(string appButtonTitle) {
+			shareParams["appButtonTitle"] = appButtonTitle;
+		}
+
+		public void SetAndroidExecParam(Hashtable androidExecParam) {
+			shareParams["androidExecParam"] = androidExecParam;
+		}
+
+		public void SetAndroidMarkParam(string androidMarkParam) {
+			shareParams["androidMarkParam"] = androidMarkParam;
+		}
+
+		public void SetIphoneExecParam(Hashtable iphoneExecParam) {
+			shareParams["iphoneExecParam"] = iphoneExecParam;
+		}
+
+		public void SetIphoneMarkParam(string iphoneMarkParam) {
+			shareParams["iphoneMarkParam"] = iphoneMarkParam;
+		}
+
+		public void SetIpadExecParam(Hashtable ipadExecParam) {
+			shareParams["ipadExecParam"] = ipadExecParam;
+		}
+
+		public void SetIpadMarkParam(string ipadMarkParam) {
+			shareParams["ipadMarkParam"] = ipadMarkParam;
+		}
+
+		public void SetTemplateArgs(Hashtable templateArgs) {
+			shareParams["templateArgs"] = templateArgs;
+		}
+
+		public void SetTemplateId(string templateId) {
+			shareParams["templateId"] = templateId;
+		}
+
+		public void SetFacebookHashtag(string hashtag) {
+			#if UNITY_ANDROID
+				shareParams["HASHTAG"] = hashtag;
+			#elif UNITY_IPHONE
+				shareParams["hashtag"] = hashtag;
+			#endif
+		}
+
+		public void SetFacebookAssetsArray(string[] imageAsset, string videoAsset) {
+			#if UNITY_IPHONE
+				if (imageAsset != null) {
+					shareParams["facebook_imageasset"] = String.Join(",",imageAsset);
+				}
+				if (videoAsset != null) {
+					shareParams["facebook_videoasset"] = videoAsset;
+				}
+			#endif
+		}
+
+		public void SetFacebookQuote(string quote) {
+			#if UNITY_ANDROID
+				shareParams["QUOTE"] = quote;
+			#elif UNITY_IPHONE
+				shareParams["quote"] = quote;
+			#endif
+		}
+
+		public void setFacebookShareType(int type) {
+			shareParams["facebook_shareType"] = type;
+		}
+
+		public void setFacebookShareTypes(int[] type) {
+			shareParams["facebook_shareTypes"] = type;
+		}
+
+		public void SetMessengerGif(string gif) {
+			shareParams["gif"] = gif;
+		}
+
+		public void SetEnableClientShare(bool enable) {
+			shareParams["clientShare"] = enable;
+		}
+
+		public void SetEnableSinaWeiboAPIShare(bool enable) {
+			shareParams["apiShare"] = enable;
+		}
+
+		public void SetEnableAdvancedInterfaceShare(bool enalble) {
+			shareParams["advancedShare"] = enalble;
+		}
+
+		public void SetSinaShareEnableShareToStory(bool enalble) {
+			shareParams["isShareToStory"] = enalble;
+		}
+
+		public void SetMiniProgramUserName(string userName) {
+			shareParams["wxUserName"] = userName;
+		}
+
+		public void SetMiniProgramAppID(string appID) {
+			#if UNITY_ANDROID
+				shareParams["mini_program_appid"] = appID;
+			#elif UNITY_IPHONE
+				shareParams["qqMiniProgramAppID"] = appID;
+			#endif
+		}
+
+		public void SetMiniProgramPath(string path) {
+			shareParams["wxPath"] = path;
+			#if UNITY_ANDROID
+				shareParams["mini_program_path"] = path;
+			#elif UNITY_IPHONE
+				shareParams["qqMiniProgramPath"] = path;
+			#endif
+		}
+
+		public void SetMiniProgramWithShareTicket(bool enalble) {
+			shareParams ["wxWithShareTicket"] = enalble;
+		}
+
+		public void SetMiniProgramType(int type) {
+			shareParams ["wxMiniProgramType"] = type;
+			shareParams["qqMiniprogramType"] = type;
+		}
+
+		public void SetQQMiniProgramType(string type) {
+			shareParams["mini_program_type"] = type;
+		}
+
+		public void SetMiniProgramHdThumbImage(string hdThumbImage) {
+			shareParams ["wxMiniProgramHdThumbImage"] = hdThumbImage;
+			#if UNITY_IPHONE
+				shareParams["qqMiniProgramHdThumbImage"] = hdThumbImage;
+			#endif
+		}
+
+		public void SetMiniProgramWebpageUrl(string webpageUrl) {
+			shareParams["qqMiniProgramWebpageUrl"] = webpageUrl;
+		}
+
+		public void SetSubreddit(string subreddit) {
+			shareParams["sr"] = subreddit;
+		}
+
+		public void SetSinaLinkCard(bool enable) {
+			shareParams["sina_linkCard"] = enable;
+		}
+
+		public void SetSinaCardTitle(string title) {
+			shareParams["sina_cardTitle"] = title;
+		}
+
+		public void SetSinaCardSummary(string summary) {
+			#if UNITY_ANDROID
+				shareParams["lc_summary"] = summary;
+			#elif UNITY_IPHONE
+				shareParams["sina_cardSummary"] = summary;
+			#endif
+		}
+
+		public void SetSinaCardImageAndroid(JsonData jsonobject) {
+			shareParams["lc_image"] = jsonobject;
+		}
+
+		public void SetSinaCardTypeAndroid(string type) {
+			shareParams["lc_object_type"] = type;
+		}
+
+		public void SetSinaCardDisplayNameAndroid(string displayname) {
+			shareParams["lc_display_name"] = displayname;
+		}
+
+		public void SetSinaCardCreateAtAndroid(string createtime) {
+			shareParams["lc_create_at"] = createtime;
+		}
+
+		public void SetSinaCardURLAndroid(string url) {
+			shareParams["lc_url"] = url;
+		}
+
+		/// <summary>
+		/// 抖音视频9.0及其以上版本系统需要传的activity
+		/// <summary>
+		#if UNITY_ANDROID
+		public void SetActivity(AndroidJavaObject activity) {
+			shareParams["activity"] = activity;
+		}
+		#endif
+
+		/// <summary>
+		/// 不同平台分享不同内容
+		/// <summary>
+		public void SetShareContentCustomize(PlatformType platform, ShareContent content) {
+			customizeShareParams [(int)platform] = content.GetShareParamsStr();
+		}
+
+		public string GetShareParamsStr() {
+			if (customizeShareParams.Count > 0) {
+				shareParams["customizeShareParams"] = customizeShareParams;
+			}
+			String jsonStr = MiniJSON.jsonEncode (shareParams);
+			return jsonStr;
+		}
+
+		public Hashtable GetShareParams() {
+			if (customizeShareParams.Count > 0) {
+				shareParams["customizeShareParams"] = customizeShareParams;
+			}
+			String jsonStr = MiniJSON.jsonEncode (shareParams);
+			return shareParams;
+		}
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareContent.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0e1f953fcac20465aa3b0ec2d07a261f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 382 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDK.cs

@@ -0,0 +1,382 @@
+using System;
+using System.IO;
+using System.Text;
+using UnityEngine;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace cn.sharesdk.unity3d {
+	public delegate void sendWXRequestToken(string uid, string token);
+	public delegate void sendWXRefreshToken(string token);
+
+	public class ShareSDK : MonoBehaviour
+	{
+		//版本号,每次发布新版本都需要更新
+		public static string version = "3.0.1";
+
+#if UNITY_IPHONE || UNITY_IOS
+		public string appKey = "3276d3e413040";
+		public string appSecret = "4280a3a6df667cfce37528dec03fd9c3";
+		public string mobNetLater = "2";
+		public string mobTwitterVer = "2";
+
+		public List<string> customAssociatedDomains = new List<string>();
+		public GetWXRequestTokenHanlerEvent wxRequestHandler;
+		public GetWXRefreshTokenHanlerEvent wxRefreshTokenHandler;
+		public GetShareCommandHanlerEvent shareCommandHandler;
+#endif
+		private int reqID;
+		public DevInfoSet devInfo;
+		public ShareSDKImpl sdk;
+		public EventHandler authHandler;
+		public EventHandler shareHandler;
+		public EventHandler showUserHandler;
+		public EventHandler getFriendsHandler;
+		public EventHandler followFriendHandler;
+		public EventHandler clientValidForAndroidHandler;
+		void Awake() {
+			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) || "WithShareTicket".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
+			sdk = new AndroidImpl(gameObject);
+			sdk.PrepareLoopShare();
+			sdk.setChannelId();
+#elif UNITY_IPHONE
+			sdk = new iOSImpl(gameObject);
+#endif
+
+			sdk.SetPlatformConfig(platformConfigs);
+		}
+
+		public delegate void EventHandler(int reqID, ResponseState state, PlatformType type, Hashtable data);
+
+		private void _Callback(string data) {
+			if (data == null) {
+				return;
+			}
+
+			Hashtable res = (Hashtable)MiniJSON.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"]);
+
+			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;
+				}
+			}
+		}
+
+		public void OnError(int reqID, PlatformType platform, int action, Hashtable throwable) {
+			switch (action) {
+				case 1: {
+					if (authHandler != null) {
+						authHandler(reqID, ResponseState.Fail, platform, throwable);
+					}
+					break;
+				}
+				case 2: {
+					if (getFriendsHandler != null) {
+						getFriendsHandler(reqID, ResponseState.Fail, platform, throwable);
+					}
+					break;
+				}
+				case 6: {
+					if (followFriendHandler != null) {
+						followFriendHandler(reqID, ResponseState.Fail, platform, throwable);
+					}
+					break;
+				}
+				case 9: {
+					if (shareHandler != null) {
+						shareHandler(reqID, ResponseState.Fail, platform, throwable);
+					}
+					break;
+				}
+				case 8: {
+					if (showUserHandler != null) {
+						showUserHandler(reqID, ResponseState.Fail, platform, throwable);
+					}
+					break;
+				}
+			}
+		}
+
+		public void OnComplete(int reqID, PlatformType platform, int action, Hashtable res) {
+			switch (action) {
+				case 1: {
+					if (authHandler != null) {
+						authHandler(reqID, ResponseState.Success, platform, res);
+					}
+					break;
+				}
+				case 2: {
+					if (getFriendsHandler != null) {
+						getFriendsHandler(reqID, ResponseState.Success, platform, res);
+					}
+					break;
+				}
+				case 6: {
+					if (followFriendHandler != null) {
+						followFriendHandler(reqID, ResponseState.Success, platform, res);
+					}
+					break;
+				}
+				case 9: {
+					if (shareHandler != null) {
+						shareHandler(reqID, ResponseState.Success, platform, res);
+					}
+					break;
+				}
+				case 8: {
+					if (showUserHandler != null) {
+						showUserHandler(reqID, ResponseState.Success, platform, res);
+					}
+					break;
+				}
+				case 12: {
+                    if (clientValidForAndroidHandler != null) {
+                        clientValidForAndroidHandler(reqID,ResponseState.Success,platform, res);
+                    }
+                    break;
+                }
+#if UNITY_IPHONE
+				case 11: {
+					shareCommandHandler(res);
+					break;
+				}
+				case 10: {
+					int isRefresh = Convert.ToInt32(res["isRefreshToken"]);
+					if (isRefresh == 1) {
+						String uid = Convert.ToString(res["uid"]);
+						wxRefreshTokenHandler(uid, sendWXRefreshTokenMethod);
+					} else {
+						String authCode = Convert.ToString(res["authCode"]);
+						wxRequestHandler(authCode, sendWXRequestTokenMehtod);
+					}
+					break;
+				}
+#endif
+			}
+		}
+
+		public void OnCancel(int reqID, PlatformType platform, int action) {
+			switch (action) {
+				case 1: {
+					if (authHandler != null) {
+						authHandler(reqID, ResponseState.Cancel, platform, null);
+					}
+					break;
+				}
+				case 2: {
+					if (getFriendsHandler != null) {
+						getFriendsHandler(reqID, ResponseState.Cancel, platform, null);
+					}
+					break;
+				}
+				case 6: {
+					if (followFriendHandler != null) {
+						followFriendHandler(reqID, ResponseState.Cancel, platform, null);
+					}
+					break;
+				}
+				case 9: {
+					if (shareHandler != null) {
+						shareHandler(reqID, ResponseState.Cancel, platform, null);
+					}
+					break;
+				}
+				case 8: {
+					if (showUserHandler != null) {
+						showUserHandler(reqID, ResponseState.Cancel, platform, null);
+					}
+					break;
+				}
+			}
+		}
+
+		public void InitSDK(string appKey) {
+			//shareSDKUtils.InitSDK (appKey);
+		}
+
+		public void InitSDK(string appKey, string appSecret) {
+			//shareSDKUtils.InitSDK (appKey,appSecret);
+		}
+
+		public void SetPlatformConfig(Hashtable configInfo) {
+			sdk.SetPlatformConfig(configInfo);
+		}
+
+		public int Authorize(PlatformType platform) {
+			reqID ++;
+			sdk.Authorize(reqID, platform);
+			return reqID;
+		}
+
+		public void CancelAuthorize(PlatformType platform) {
+			sdk.CancelAuthorize(platform);
+		}
+
+		public bool IsAuthorized(PlatformType platform) {
+			return sdk.IsAuthorized(platform);
+		}
+
+		public bool IsClientValid(PlatformType platform) {
+			return sdk.IsClientValid(platform);
+		}
+
+		public int GetUserInfo(PlatformType platform) {
+			reqID ++;
+			sdk.GetUserInfo(reqID, platform);
+			return reqID;
+		}
+
+		public int ShareContent(PlatformType platform, ShareContent content) {
+			reqID ++;
+			sdk.ShareContent(reqID, platform, content);
+			return reqID;
+		}
+
+		public int ShareContent(PlatformType[] platforms, ShareContent content) {
+			reqID ++;
+			sdk.ShareContent(reqID, platforms, content);
+			return reqID;
+		}
+
+		public int ShareContentWithActivity(PlatformType platform, ShareContent content) {
+			reqID++;
+#if UNITY_IPHONE
+			sdk.ShareContentWithActivity(reqID, platform, content);
+#endif
+			return reqID;
+		}
+
+		public int ShowPlatformList(PlatformType[] platforms, ShareContent content, int x, int y) {
+			reqID++;
+			sdk.ShowPlatformList(reqID, platforms, content, x, y);
+			return reqID;
+		}
+
+		public int ShowShareContentEditor(PlatformType platform, ShareContent content) {
+			reqID++;
+			sdk.ShowShareContentEditor(reqID, platform, content);
+			return reqID;
+		}
+
+		public int ShareWithContentName(PlatformType platform, string contentName, Hashtable customFields) {
+			reqID++;
+			sdk.ShareWithContentName(reqID, platform, contentName, customFields);
+			return reqID;
+		}
+
+		public int ShowPlatformListWithContentName(string contentName, Hashtable customFields, PlatformType[] platforms, int x, int y) {
+			reqID++;
+			sdk.ShowPlatformListWithContentName(reqID, contentName, customFields, platforms, x, y);
+			return reqID;
+		}
+
+		public int ShowShareContentEditorWithContentName(PlatformType platform, string contentName, Hashtable customFields) {
+			reqID++;
+			sdk.ShowShareContentEditorWithContentName(reqID, platform, contentName, customFields);
+			return reqID;
+		}
+
+		public int GetFriendList(PlatformType platform, int count, int page) {
+			reqID++;
+			sdk.GetFriendList(reqID, platform, count, page);
+			return reqID;
+		}
+
+		public int AddFriend(PlatformType platform, string account) {
+			reqID++;
+			sdk.AddFriend(reqID, platform, account);
+			return reqID;
+		}
+
+		public Hashtable GetAuthInfo(PlatformType platform) {
+			return sdk.GetAuthInfo(platform);
+		}
+
+		public void DisableSSO(bool open) {
+			sdk.DisableSSO(open);
+		}
+
+		public void openMiniProgram(string userName, string path, int miniProgramType) {
+			sdk.openMiniProgram(userName, path, miniProgramType);
+		}
+
+		public int isClientValidForAndroid(PlatformType platform) {
+         	reqID++;
+
+#if UNITY_ANDROID
+         	sdk.isClientValidForAndroid(reqID,platform);
+#endif
+         	
+         	return reqID;
+       	}
+#if UNITY_IPHONE || UNITY_IOS
+		public delegate void GetWXRequestTokenHanlerEvent(string authCode, sendWXRequestToken send);
+
+		public delegate void GetWXRefreshTokenHanlerEvent(string authCode, sendWXRefreshToken send);
+
+		public delegate void GetShareCommandHanlerEvent(Hashtable data);
+
+		public void ShareWithCommand(Hashtable customFields) {
+			sdk.shareSDKWithCommand(customFields);
+		}
+#endif
+
+		public void getWXRequestToken() {
+			sdk.getWXRequestToken();
+		}
+
+		public void getWXRefreshToken() {
+			sdk.getWXRefreshToken();
+		}
+
+		public void sendWXRequestTokenMehtod(string uid, string token) {
+			sdk.sendWXRequestToken(uid, token);
+		}
+
+		public void sendWXRefreshTokenMethod(string token) {
+			sdk.sendWXRefreshToken(token);
+		}
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDK.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0117e2d36e70d4421ad96756610a5255
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1218 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKDevInfo.cs

@@ -0,0 +1,1218 @@
+using System;
+using UnityEngine;
+using System.Collections;
+
+namespace cn.sharesdk.unity3d {
+	[Serializable]
+	public class DevInfoSet {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public Copy copy;
+		public YixinFavorites yixinFavorites;
+		public YixinSeries yixinSeries;
+		public WechatSeries wechatSeries;
+		public QQSeries qqSeries;
+		public KakaoSeries kakaoSeries;
+		public SnapChat snapChat;
+		public EvernoteInternational evernoteInternational;
+		public Apple apple;
+		public WatermelonVideo watermelonVideo;
+#endif
+
+#if UNITY_ANDROID
+		public FourSquare fourSquare;
+#endif
+		public SinaWeiboDevInfo sinaweibo;
+		public TencentWeiboDevInfo tencentweibo;
+		public Facebook facebook;
+		public Twitter twitter;
+		public Email email;
+		public ShortMessage shortMessage;
+		public Douban douban;
+		public Renren renren;
+		public GooglePlus googlePlus;
+		public KaiXin kaiXin;
+		public Pocket pocket;
+		public Instagram instagram;
+		public LinkedIn linkedIn;
+		public Tumblr tumblr;
+		public YouDao youDao;
+		public Flickr flickr;
+		public Evernote evernote;
+		public WhatsApp whatsApp;
+		public Line line;
+		public Dropbox dropbox;
+		public VKontakte vkontakte;
+		public Pinterest pinterest;
+		public Mingdao mingdao;
+		public KakaoTalk kakaoTalk;
+		public KakaoStory kakaoStory;
+		public QQ qq;
+		public QZone qzone;
+		public WeChat wechat;
+		public WeChatMoments wechatMoments;
+		public WeChatFavorites wechatFavorites;
+		public Yixin yixin;
+		public YixinMoments yixinMoments;
+		public FacebookMessenger facebookMessenger;
+		public AliSocial aliSocial;
+		public Instapaper instapaper;
+		public AliSocialMoments aliSocialMoments;
+		public Dingding dingTalk;
+		public Youtube youtube;
+		public MeiPai meiPai;
+		public CMCC cmcc;
+		public Reddit reddit;
+		public Telegram telegram;
+		public ESurfing eSurfing;
+		public FacebookAccount facebookAccount;
+		public WeWork wework;
+		public Douyin douyin;
+		public Oasis oasis;
+		public TikTok tiktok;
+		public KuaiShou kuaishou;
+
+	}
+
+	[Serializable]
+	public class DevInfo {
+		public bool Enable = true;
+
+	}
+
+	[Serializable]
+	public class SinaWeiboDevInfo : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.SinaWeibo;
+		public string app_key = "1556465402";
+		public string app_secret = "d40c0a5436156e2604a30851df6434bf";
+		public string redirect_uri = "https://www.mob.com/";
+		public string app_universalLink = "https://70imc.share2dlink.com/";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.SinaWeibo;
+		public string SortId = "4";
+		public string AppKey = "568898243";
+		public string AppSecret = "38a4f8204cc784f81f9f0daaf31e02e3";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+		public bool ShareByAppClient = true;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class TencentWeiboDevInfo : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.TencentWeibo;
+		public string app_key = "801307650";
+		public string app_secret = "ae36f4ee3946e1cbb98d6965b0b2ff5c";
+		public string redirect_uri = "http://www.sharesdk.cn";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.TencentWeibo;
+		public string SortId = "3";
+		public string AppKey = "801307650";
+		public string AppSecret = "ae36f4ee3946e1cbb98d6965b0b2ff5c";
+		public string RedirectUri = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class QQ : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.QQ;
+		public string app_id = "1110451818";
+		public string app_key = "OlbzvuSP3Hgj5yNS";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.QQ;
+		public string SortId = "2";
+		public string AppId = "1110451818";
+		public string AppKey = "aed9b0303e3ed1e27bae87c33761161d";
+		public bool ShareByAppClient = true;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class QZone : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.QZone;
+		public string app_id = "1110451818";
+		public string app_key = "OlbzvuSP3Hgj5yNS";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.QZone;
+		public string SortId = "1";
+		public string AppId = "1110451818";
+		public string AppKey = "ae36f4ee3946e1cbb98d6965b0b2ff5c";
+		public bool ShareByAppClient = true;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WeChat : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.WeChat;
+		public string app_id = "wx617c77c82218ea2c";
+		public string app_secret = "c7253e5289986cf4c4c74d1ccc185fb1";
+		public string app_universalLink = "https://70imc.share2dlink.com/";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.WeChat;
+		public string SortId = "5";
+		public string AppId = "wxf8452955e8de2e46";
+		public string AppSecret = "f9fcae1666d6e9e24cac0f7dd395433d";
+		public string UserName = "gh_038755574468@app";
+		public string Path = "/page/API/pages/share/share";
+		public bool BypassApproval = false;
+		public bool WithShareTicket = true;
+		public string MiniprogramType = "0";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WeChatMoments : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.WeChatMoments;
+		public string app_id = "wx617c77c82218ea2c";
+		public string app_secret = "c7253e5289986cf4c4c74d1ccc185fb1";
+		public string app_universalLink = "https://70imc.share2dlink.com/";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.WeChatMoments;
+		public string SortId = "6";
+		public string AppId = "wxf8452955e8de2e46";
+		public string AppSecret = "f9fcae1666d6e9e24cac0f7dd395433d";
+		public bool BypassApproval = true;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WeChatFavorites : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.WeChatFavorites;
+		public string app_id = "wx617c77c82218ea2c";
+		public string app_secret = "c7253e5289986cf4c4c74d1ccc185fb1";
+		public string app_universalLink = "https://70imc.share2dlink.com/";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.WeChatFavorites;
+		public string SortId = "7";
+		public string AppId = "wxf8452955e8de2e46";
+		public string AppSecret = "f9fcae1666d6e9e24cac0f7dd395433d";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Facebook : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Facebook;
+		public string api_key = "1412473428822331";
+		public string app_secret = "a42f4f3f867dc947b9ed6020c2e93558";
+		public string display_name = "ShareSDK";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Facebook;
+		public string SortId = "8";
+		public string ConsumerKey = "1412473428822331";
+		public string ConsumerSecret = "a42f4f3f867dc947b9ed6020c2e93558";
+		public string RedirectUrl = "https://www.baidu.com/";
+		public string ShareByAppClient = "true";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Twitter : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Twitter;
+		public string consumer_key = "YUJMMTFOcE93MGI4Zi1aRTlHQnM6MTpjaQ";
+		public string consumer_secret = "ppuG1yR5Sb7PXn2IZAu-4nJwbhh1mLq3ieJXOkC5wOJpVxmWli";
+		public string redirect_uri = "https://www.mob.com";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Twitter;
+		public string SortId = "9";
+		public string ConsumerKey = "LRBM0H75rWrU9gNHvlEAA2aOy";
+		public string ConsumerSecret = "gbeWsZvA9ELJSdoBzJ5oLKX0TU09UOwrzdGfo9Tg7DjyGuMe8G";
+		public string CallbackUrl = "http://mob.com";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Renren : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Renren;
+		public string app_id = "226427";
+		public string app_key = "fc5b8aed373c4c27a05b712acba0f8c3";
+		public string secret_key = "f29df781abdd4f49beca5a2194676ca4";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Renren;
+		public string SortId = "10";
+		public string AppId = "226427";
+		public string ApiKey = "fc5b8aed373c4c27a05b712acba0f8c3";
+		public string SecretKey = "f29df781abdd4f49beca5a2194676ca4";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class KaiXin : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Kaixin;
+		public string api_key = "358443394194887cee81ff5890870c7c";
+		public string secret_key = "da32179d859c016169f66d90b6db2a23";
+		public string redirect_uri = "http://www.sharesdk.cn";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Kaixin;
+		public string SortId = "11";
+		public string AppKey = "358443394194887cee81ff5890870c7c";
+		public string AppSecret = "da32179d859c016169f66d90b6db2a23";
+		public string RedirectUri = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Email : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Mail;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Mail;
+		public string SortId = "12";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class ShortMessage : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.SMS;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.SMS;
+		public string SortId = "13";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Douban : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.DouBan;
+		public string api_key = "02e2cbe5ca06de5908a863b15e149b0b";
+		public string secret = "9f1e7b4f71304f2f";
+		public string redirect_uri = "http://www.sharesdk.cn";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.DouBan;
+		public string SortId = "14";
+		public string ApiKey = "02e2cbe5ca06de5908a863b15e149b0b";
+		public string Secret = "9f1e7b4f71304f2f";
+		public string RedirectUri = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class YouDao : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.YouDaoNote;
+		public string consumer_key = "568898243";
+		public string consumer_secret = "d98217b4020e7f1874263795f44838fe";
+		public string oauth_callback = "http://www.sharesdk.cn";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.YouDaoNote;
+		public string SortId = "15";
+		public string ConsumerKey = "dcde25dca105bcc36884ed4534dab940";
+		public string ConsumerSecret = "d98217b4020e7f1874263795f44838fe";
+		public string RedirectUri = "http://www.sharesdk.cn";
+		public string HostType = "product";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Evernote : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Evernote;
+		public string consumer_key = "46131514-6903";
+		public string consumer_secret = "08d7a6f3afcc888a";
+		public int isSandBox = 1;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Evernote;
+		public string SortId = "17";
+		public string ConsumerKey = "sharesdk-7807";
+		public string ConsumerSecret = "d05bf86993836004";
+		public bool ShareByAppClient = false;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class EvernoteInternational : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.EvernoteInternational;
+		public string consumer_key = "46131514-6903";
+		public string consumer_secret = "08d7a6f3afcc888a";
+		public int RedirectUrl = 0;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class LinkedIn : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.LinkedIn;
+		public string api_key = "75x5xdhllzno44";
+		public string secret_key = "uiS3nlE7XBGmTL3P";
+		public string redirect_url = "http://mob.com";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.LinkedIn;
+		public string SortId = "18";
+		public string ApiKey = "ejo5ibkye3vo";
+		public string SecretKey = "cC7B2jpxITqPLZ5M";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class GooglePlus : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.GooglePlus;
+		public string client_id = "232554794995-4m0c7j0f289fkq05ee0abkso4p9d904i.apps.googleusercontent.com";
+		public string client_secret = "";
+		public string redirect_uri = "com.googleusercontent.apps.232554794995-4m0c7j0f289fkq05ee0abkso4p9d904i:/oauthredirect";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.GooglePlus;
+		public string SortId = "19";
+		public string ClientID = "236300675100-am5pm8km7md1memjevq8rl9pg5c4s4b8.apps.googleusercontent.com";
+		public string RedirectUrl = "http://localhost";
+		public bool ShareByAppClient = false;
+		public string OfficialVersion = "default";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class FourSquare : DevInfo {
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Foursquare;
+		public string SortId = "20";
+		public string ClientID = "G0ZI20FM30SJAJTX2RIBGD05QV1NE2KVIM2SPXML2XUJNXEU";
+		public string ClientSecret = "3XHQNSMMHIFBYOLWEPONNV4DOTCDBQH0AEMVGCBG0MZ32XNU";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Pinterest : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Pinterest;
+		public string client_id = "5057854497590653616";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Pinterest;
+		public string SortId = "21";
+		public string ClientId = "1432928";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Flickr : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Flickr;
+		public string api_key = "cbed81d4a1bc7417693ab7865e354717";
+		public string api_secret = "4c490343869091f2";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Flickr;
+		public string SortId = "22";
+		public string ApiKey = "33d833ee6b6fca49943363282dd313dd";
+		public string ApiSecret = "3a2c5b42a8fbb8bb";
+		public string RedirectUri = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Tumblr : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Tumblr;
+		public string consumer_key = "2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM";
+		public string consumer_secret = "3Rt0sPFj7u2g39mEVB3IBpOzKnM3JnTtxX2bao2JKk4VV1gtNo";
+		public string callback_url = "http://sharesdk.cn";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Tumblr;
+		public string SortId = "23";
+		public string OAuthConsumerKey = "2QUXqO9fcgGdtGG1FcvML6ZunIQzAEL8xY6hIaxdJnDti2DYwM";
+		public string SecretKey = "3Rt0sPFj7u2g39mEVB3IBpOzKnM3JnTtxX2bao2JKk4VV1gtNo";
+		public string CallbackUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Dropbox : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Dropbox;
+		public string app_secret = "w0nmp4os3ngo1ja";
+		public string app_key = "us514wslpfojbxc";
+		public string oauth_callback = "http://localhost";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Dropbox;
+		public string SortId = "24";
+		public string AppKey = "7janx53ilz11gbs";
+		public string AppSecret = "c1hpx5fz6tzkm32";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class VKontakte : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.VKontakte;
+		public string application_id = "5312801";
+		public string secret_key = "ZHG2wGymmNUCRLG2r6CY";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.VKontakte;
+		public string SortId = "25";
+		public string ApplicationId = "3921561";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Instagram : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Instagram;
+		public string client_id = "1145188725813939";
+		public string client_secret = "256191f3abb381a9d481f6f9bbaef179";
+		public string redirect_uri = "https://www.mob.com/";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Instagram;
+		public string SortId = "26";
+		public string ClientId = "ff68e3216b4f4f989121aa1c2962d058";
+		public string ClientSecret = "1b2e82f110264869b3505c3fe34e31a1";
+		public string RedirectUri = "http://sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Yixin : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.YiXinSession;
+		public string app_id = "yxfddfe3934340436da964fd20885fe2a4";
+		public string app_secret = "574471e102e1e5d2a";
+		public string redirect_uri = "http://www.mob.com";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.YiXinSession;
+		public string SortId = "27";
+		public string AppId = "yx0d9a9f9088ea44d78680f3274da1765f";
+		public bool BypassApproval = true;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class YixinMoments : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.YiXinTimeline;
+		public string app_id = "yxfddfe3934340436da964fd20885fe2a4";
+		public string app_secret = "574471e102e1e5d2a";
+		public string redirect_uri = "http://www.mob.com";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.YiXinTimeline;
+		public string SortId = "28";
+		public string AppId = "yx0d9a9f9088ea44d78680f3274da1765f";
+		public bool BypassApproval = true;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Mingdao : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.MingDao;
+		public string app_key = "97230F25CA5C";
+		public string app_secret = "A5DC29AF7C5A5851F28E903AE9EAC0";
+		public string redirect_uri = "http://mob.com";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.MingDao;
+		public string SortId = "29";
+		public string AppKey = "EEEE9578D1D431D3215D8C21BF5357E3";
+		public string AppSecret = "5EDE59F37B3EFA8F65EEFB9976A4E933";
+		public string RedirectUri = "http://sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Line : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Line;
+		public string channel_id = "1639219273";
+		public string app_universalLink = "https://70imc.share2dlink.com/line-auth";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Line;
+		public string SortId = "30";
+		public string ChannelID = "1477692153";
+		public string ChannelSecret = "f30c036370f2e04ade71c52eef73a9af";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class KakaoTalk : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.KakaoTalk;
+		public string app_key = "9c17eb03317e0e627ec95a400f5785fb";
+		public string rest_api_key = "802e551a5048c3172fc1dedaaf40fcf1";
+		public string redirect_uri = "http://www.mob.com/oauth";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.KakaoTalk;
+		public string SortId = "31";
+		public string AppKey = "48d3f524e4a636b08d81b3ceb50f1003";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class KakaoStory : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.KakaoStory;
+		public string app_key = "9c17eb03317e0e627ec95a400f5785fb";
+		public string rest_api_key = "802e551a5048c3172fc1dedaaf40fcf1";
+		public string redirect_uri = "http://www.mob.com/oauth";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.KakaoStory;
+		public string SortId = "32";
+		public string AppKey = "48d3f524e4a636b08d81b3ceb50f1003";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WhatsApp : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.WhatsApp;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.WhatsApp;
+		public string SortId = "33";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Bluetooth : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Bluetooth;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Bluetooth;
+		public string SortId = "34";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Pocket : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Pocket;
+		public string consumer_key = "11496-de7c8c5eb25b2c9fcdc2b627";
+		public string redirect_uri = "pocketapp1234";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Pocket;
+		public string SortId = "35";
+		public string ConsumerKey = "32741-389c565043c49947ba7edf05";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Instapaper : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Instapaper;
+		public string consumer_key = "4rDJORmcOcSAZL1YpqGHRI605xUvrLbOhkJ07yO0wWrYrc61FA";
+		public string consumer_secret = "GNr1GespOQbrm8nvd7rlUsyRQsIo3boIbMguAl9gfpdL0aKZWe";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Instapaper;
+		public string SortId = "36";
+		public string ConsumerKey = "4rDJORmcOcSAZL1YpqGHRI605xUvrLbOhkJ07yO0wWrYrc61FA";
+		public string ConsumerSecret = "GNr1GespOQbrm8nvd7rlUsyRQsIo3boIbMguAl9gfpdL0aKZWe";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class FacebookMessenger : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.FacebookMessenger;
+		public string api_key = "1412473428822331";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.FacebookMessenger;
+		public string SortId = "37";
+		public string AppId = "107704292745179";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Copy : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Copy;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Copy;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class YixinSeries : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.YixinPlatform;
+		public string app_id = "yxfddfe3934340436da964fd20885fe2a4";
+		public string app_secret = "574471e102e1e5d2a";
+		public string redirect_uri = "http://www.mob.com";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class YixinFavorites : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.YiXinFav;
+		public string app_id = "yxfddfe3934340436da964fd20885fe2a4";
+		public string app_secret = "574471e102e1e5d2a";
+		public string redirect_uri = "http://www.mob.com";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class AliSocial : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.AliSocial;
+		public string app_id = "2017062107540437";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.AliSocial;
+		public string SortId = "50";
+		public string AppId = "2015072400185895";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class AliSocialMoments : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.AliSocialMoments;
+		public string app_id = "2017062107540437";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.AliSocialMoments;
+		public string SortId = "51";
+		public string AppId = "2015072400185895";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Dingding : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Dingding;
+		public string shareApp_id = "dingoabcwtuab76wy0kyzo";
+		public string authApp_id = "dingoax9s2mdekb7a6748n";
+		public string authApp_Secret = "dxx9KwP4BYN975umF6Mi2QW3jL7O3k3qHCSvcCbes5Y5R7mFF1ocd19p4NdzOKD4";
+		public string authApp_RedirectUri = "https://www.mob.com/sharesdk/dingding";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Dingding;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WechatSeries : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.WechatPlatform;
+		public string app_id = "wx617c77c82218ea2c";
+		public string app_secret = "c7253e5289986cf4c4c74d1ccc185fb1";
+		public string app_universalLink = "https://70imc.share2dlink.com/";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class QQSeries : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.QQPlatform;
+		public string app_id = "1110451818";
+		public string app_key = "OlbzvuSP3Hgj5yNS";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class KakaoSeries : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.KakaoPlatform;
+		public string app_key = "9c17eb03317e0e627ec95a400f5785fb";
+		public string rest_api_key = "802e551a5048c3172fc1dedaaf40fcf1";
+		public string redirect_uri = "http://www.mob.com/oauth";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Youtube : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Youtube;
+		public string client_secret = "AIzaSyDO66lmq1iQnPZT5ePqy265QylzaX2WCg8";
+		public string client_id = "232554794995-4m0c7j0f289fkq05ee0abkso4p9d904i.apps.googleusercontent.com";
+		public string redirect_uri = "http://localhost";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Youtube;
+		public string SortId = "53";
+		public string ClientID = "370141748022-bicrnsjfiije93bvdt63dh3728m4shas.apps.googleusercontent.com";
+		public string AppSecret = "AIzaSyAO06g-0TDpHcsXXO918a7QE3Zdct2bB5E";
+		public string RedirectUrl = "http://localhost";
+		public string ShareByAppClient = "true";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class MeiPai : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.MeiPai;
+		public string app_key = "1089867596";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.MeiPai;
+		public string SortId = "54";
+		public string ClientID = "1089867596";
+		public string ShareByAppClient = "true";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class CMCC : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.CMCC;
+		public string app_key = "610FC6F60177B9558C59B45C6FE47B9C";
+		public string app_id = "300011936870";
+		public int displayUI = 1;
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.CMCC;
+		public string SortId = "55";
+		public string AppKey = "2D464D8BFCE73A44B4F9DF95A2FDBE1C";
+		public string AppId = "300011860247";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Reddit : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Reddit;
+		public string app_key = "ObzXn50T7Cg0Xw";
+		public string redirect_uri = "https://www.mob.com/reddit_callback";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Reddit;
+		public string SortId = "56";
+		public string AppKey = "MExDxPuTCtFiRw";
+		public string Id = "56";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Telegram : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Telegram;
+		public string bot_token = "792340449:AAE9EZeQaXU9wq_r6X7Jalg8jITUEKYr9vw";
+		public string bot_domain = "https://www.mob.com";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Telegram;
+		public string SortId = "47";
+		public string AppKey = "782826033";
+		public string RedirectUrl = "http://www.mob.com";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class ESurfing : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.ESurfing;
+		public string app_key = "8252014408";
+		public string app_secret = "bkqJOALOPc2i6V6R5mEjqLyuzrxF8rWD";
+		public string app_name = "天天日记";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.ESurfing;
+		public string SortId = "57";
+		public string AppKey = "8148612606";
+		public string AppSecret = "mCltrhUqwshFa86egDTs0491ibaAulKA";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class FacebookAccount : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.FacebookAccount;
+		public string app_id = "1412473428822331";
+		public string client_token = "c30c08723aa8c48fbd5e01d1c3103891";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.FacebookAccount;
+		public string SortId = "58";
+		public string AppKey = "579465512480462";
+		public string AppSecret = "8a6383652dd9f23fb0994f03d350d0ca";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Douyin : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Douyin;
+		public string app_key = "awycvl19mldccyso";
+		public string app_secret = "8793a4dfdc3636cbda0924a3cfbc8424";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Douyin;
+		public string SortId = "59";
+		public string AppKey = "aw9ivykfjvi4hpwo";
+		public string AppSecret = "42b4caa6bda60bd49f05f06d0a4956e1";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class TikTok : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.TikTok;
+		public string app_key = "aw3vqar8qg1oy91q";
+		public string app_secret = "18cf1714c53e9f9c64aec484ca4f2e29";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.TikTok;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WeWork : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.WeWork;
+		public string app_Key = "wwa21eaecf93f0e3ba";
+		public string app_secret = "dW7e27P7Hc8NiYdRxnbTeOLgfI1ugR72e";
+		public string agent_id = "1000012";
+		public string schema = "wwautha21eaecf93f0e3ba000012";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.WeWork;
+		public string SortId = "60";
+		public string AppKey = "wwa21eaecf93f0e3ba";
+		public string AppSecret = "dW7e27P7Hc8NiYdRxnbTeOLgfI1ugR72e";
+		public string AgentId = "1000012";
+		public string Schema = "wwautha21eaecf93f0e3ba000012";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Oasis : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.Oasis;
+		public string app_key = "568898243";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.Oasis;
+		public string SortId = "64";
+		public string AppKey = "568898243";
+		public string AppSecret = "38a4f8204cc784f81f9f0daaf31e02e3";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class KuaiShou : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.KuaiShou;
+		public string app_id = "ks705657770555308030";
+		public string app_secret = "RQ17enXUOioeoDMrwk3j2Q";
+		public string app_universalLink = "https://70imc.share2dlink.com/";
+#endif
+
+#if UNITY_ANDROID
+		public const int type = (int)PlatformType.KuaiShou;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class SnapChat : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public int type = (int)PlatformType.SnapChat;
+		public string client_id = "dc8e6068-0578-41b8-8392-4da009519725";
+		public string RedirectUrl = "http://www.sharesdk.cn";
+		public string redirect_uri = "ssdkmoba0b0c0d0://mob";
+#endif
+
+
+	}
+
+	[Serializable]
+	public class Apple : DevInfo {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public const int type = (int)PlatformType.Apple;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class WatermelonVideo : DevInfo {
+
+#if UNITY_IPHONE
+		public const int type = (int)PlatformType.WatermelonVideo;
+#endif
+
+
+	}
+
+	[Serializable]
+	public class RestoreSceneConfigure {
+
+#if UNITY_IPHONE || UNITY_IOS
+		public string capabilititesAssociatedDomain = "applinks:ahmn.t4m.cn";
+		public string capabilititesEntitlementsPathInXcode = "Unity-iPhone/Base.entitlements";
+#endif
+		public bool Enable = false;
+
+	}
+
+	public class RestoreSceneInfo {
+		public string path;
+		public Hashtable customParams;
+		public RestoreSceneInfo(string scenePath, Hashtable sceneCustomParams) {
+
+		}
+
+
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKDevInfo.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 16e649613d2144988a4747d2a9557a59
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 155 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKImpl.cs

@@ -0,0 +1,155 @@
+using System;
+using System.Collections;
+
+namespace cn.sharesdk.unity3d {
+	public abstract class ShareSDKRestoreSceneImpl
+	{
+		public virtual void setRestoreSceneListener() {}
+
+	}
+
+	public abstract class ShareSDKImpl
+	{
+		/// <summary>
+		/// Init the ShareSDK.
+		/// <summary>
+		public abstract void InitSDK(string appKey);
+
+		public abstract void InitSDK(string appKey, string secret);
+
+		/// <summary>
+		/// add listener for loopshare
+		/// <summary>
+		public abstract void PrepareLoopShare();
+
+		/// <summary>
+		/// set channel Id
+		/// <summary>
+		public abstract void setChannelId();
+
+		/// <summary>
+		/// Sets the platform config.
+		/// <summary>
+		public abstract void SetPlatformConfig(Hashtable configs);
+
+		/// <summary>
+		/// Authorize the specified platform.
+		/// <summary>
+		public abstract void Authorize(int reqId, PlatformType platform);
+
+		/// <summary>
+		/// Removes the account of the specified platform.
+		/// <summary>
+		public abstract void CancelAuthorize(PlatformType platform);
+
+		/// <summary>
+		/// Determine weather the account of the specified platform is valid.
+		/// <summary>
+		public abstract bool IsAuthorized(PlatformType platform);
+
+		/// <summary>
+		/// Determine weather the APP-Client of platform is valid.
+		/// <summary>
+		public abstract bool IsClientValid(PlatformType platform);
+
+		/// <summary>
+		/// Request the user info of the specified platform.
+		/// <summary>
+		public abstract void GetUserInfo(int reqId, PlatformType platform);
+
+		/// <summary>
+		/// Share the content to the specified platform with api.
+		/// <summary>
+		public abstract void ShareContent(int reqId, PlatformType platform, ShareContent content);
+
+		/// <summary>
+		/// Share the content to the specified platform with api.
+		/// <summary>
+		public abstract void ShareContent(int reqId, PlatformType[] platforms, ShareContent content);
+
+		/// <summary>
+		/// Show the platform list to share.
+		/// <summary>
+		public abstract void ShowPlatformList(int reqId, PlatformType[] platforms, ShareContent content, int x, int y);
+
+		/// <summary>
+		/// OGUI share to the specified platform. 
+		/// <summary>
+		public abstract void ShowShareContentEditor(int reqId, PlatformType platform, ShareContent content);
+
+		/// <summary>
+		/// share according to the name of node<Content> in ShareContent.xml(in ShareSDKConfigFile.bunle,you can find it in xcode - ShareSDK folider) [only valid in iOS temporarily)]
+		/// <summary>
+		public abstract void ShareWithContentName(int reqId, PlatformType platform, string contentName, Hashtable customFields);
+
+		/// <summary>
+		/// show share platform list according to the name of node<Content> in ShareContent.xml file(in ShareSDKConfigFile.bunle,you can find it in xcode - ShareSDK folider) [only valid in iOS temporarily)] 
+		/// <summary>
+		public abstract void ShowPlatformListWithContentName(int reqId, string contentName, Hashtable customFields, PlatformType[] platforms, int x, int y);
+
+		/// <summary>
+		/// show share content editor according to the name of node<Content> in ShareContent.xml file(in ShareSDKConfigFile.bunle,you can find it in xcode - ShareSDK folider) [only valid in iOS temporarily)]
+		/// <summary>
+		public abstract void ShowShareContentEditorWithContentName(int reqId, PlatformType platform, string contentName, Hashtable customFields);
+
+		/// <summary>
+		/// Gets the friend list.
+		/// <summary>
+		public abstract void GetFriendList(int reqID, PlatformType platform, int count, int page);
+
+		/// <summary>
+		/// Follows the friend.
+		/// <summary>
+		public abstract void AddFriend(int reqID, PlatformType platform, string account);
+
+		/// <summary>
+		/// Gets the auth info.
+		/// <summary>
+		public abstract Hashtable GetAuthInfo(PlatformType platform);
+
+		/// <summary>
+		/// the setting of SSO
+		/// <summary>
+		public abstract void DisableSSO(bool disable);
+
+		/// <summary>
+		/// Open Wechat miniProgram
+		/// <summary>
+		public abstract bool openMiniProgram(string userName, string path, int miniProgramType);
+
+		public abstract void getWXRequestToken();
+
+		public abstract void getWXRefreshToken();
+
+		public abstract void sendWXRefreshToken(string token);
+
+		public abstract void sendWXRequestToken(string uid, string token);
+
+#if UNITY_ANDROID
+		public abstract void isClientValidForAndroid(int reqID,PlatformType platform);
+#endif
+
+#if UNITY_IPHONE || UNITY_IOS
+		/// <summary>
+		/// 获取MobSDK隐私协议内容, url为true时返回MobTech隐私协议链接,false返回协议的内容
+		/// <summary>
+		public abstract void shareSDKWithCommand(Hashtable content);
+
+		/// <summary>
+		/// Share the content to the specified platform with api.
+		/// <summary>
+		public abstract void ShareContentWithActivity(int reqID, PlatformType platform, ShareContent content);
+
+
+#endif
+
+#if UNITY_ANDROID
+		/// <summary>
+		/// 获取MobSDK隐私协议内容, url为true时返回MobTech隐私协议链接,false返回协议的内容
+		/// <summary>
+		public abstract void setDisappearShareToast(bool url);
+
+
+#endif
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6fe2f7665a76c45c4a00decc2b98fba3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 58 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.cs

@@ -0,0 +1,58 @@
+using System;
+using UnityEngine;
+using System.Collections;
+
+namespace cn.sharesdk.unity3d {
+	public class ShareSDKRestoreScene : MonoBehaviour
+	{
+		public RestoreSceneConfigure restoreSceneConfig;
+		public static bool isInit;
+		public static ShareSDKRestoreScene _instance;
+		public static ShareSDKRestoreSceneImpl restoreSceneUtils;
+		public static event RestoreSceneHandler onRestoreScene;
+		public static event AnalysisCommandHandler OnAnalysisCommand;
+		public delegate void RestoreSceneHandler(RestoreSceneInfo scene);
+
+		public delegate void AnalysisCommandHandler(Hashtable parameters);
+
+		void Awake() {
+			if (!isInit) {
+				isInit = true;
+			}
+
+			if (_instance != null) {
+				Destroy(_instance.gameObject);
+			}
+			_instance = this;
+			DontDestroyOnLoad(this.gameObject);
+		}
+
+		public static void setRestoreSceneListener(cn.sharesdk.unity3d.ShareSDKRestoreScene.RestoreSceneHandler sceneHandler) {
+			onRestoreScene += sceneHandler;
+		}
+
+		public static void setCommandListener(cn.sharesdk.unity3d.ShareSDKRestoreScene.AnalysisCommandHandler commandHandler) {
+			OnAnalysisCommand += commandHandler;
+		}
+
+		public void _RestoreCallBack(string data) {
+			Hashtable res = (Hashtable)MiniJSON.jsonDecode(data);
+			if (res == null || res.Count <= 0) {
+				return;
+			}
+			string path = res ["path"].ToString();
+			Hashtable customParams = (Hashtable)res ["params"];
+			RestoreSceneInfo scene = new RestoreSceneInfo (path, customParams);
+
+			onRestoreScene(scene);
+		}
+
+		public void _AnalysisCommandCallBack(string data) {
+			Hashtable res = (Hashtable)MiniJSON.jsonDecode(data);
+			if (res == null || res.Count <= 0) {
+				return;
+			}
+			OnAnalysisCommand(res);
+		}
+	}
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 679368cf0196342a3b3f575e195741fa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 57 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.prefab

@@ -0,0 +1,57 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 1178127336096660}
+  m_IsPrefabAsset: 1
+--- !u!1 &1178127336096660
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4359323452861472}
+  - component: {fileID: 114446542740581388}
+  m_Layer: 0
+  m_Name: ShareSDKRestoreScene
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4359323452861472
+Transform:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1178127336096660}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 2.106746, y: 0.16500872, z: 0.09768422}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &114446542740581388
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1178127336096660}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 367f4a287767a4148835af7c4a4e32c2, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  restoreSceneConfig:
+    Enable: 0
+    capabilititesAssociatedDomain: applinks:ahmn.t4m.cn
+    capabilititesEntitlementsPathInXcode: Unity-iPhone/Base.entitlements

+ 7 - 0
GameClient/Assets/ThirdParty/ShareSDK/ShareSDKRestoreScene.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4ec8b4e3d67764d158788c6de6f85811
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
GameClient/Assets/ThirdParty/ShareSDK/iOS.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1302fbc0d7deb4501b803e1240d4527e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 240 - 0
GameClient/Assets/ThirdParty/ShareSDK/iOS/iOSImpl.cs

@@ -0,0 +1,240 @@
+using System;
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace cn.sharesdk.unity3d {
+#if UNITY_IPHONE || UNITY_IOS
+	public class iOSImpl : ShareSDKImpl {
+		private string _callbackObjectName = "Main Camera";
+		private string _appKey;
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKRegisterAppAndSetPltformsConfig(string appKey, string configInfo);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKAuthorize(int reqID, int platType, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKCancelAuthorize(int platType);
+		
+		[DllImport("__Internal")]
+		private static extern bool __iosShareSDKHasAuthorized(int platType);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKGetUserInfo(int reqID, int platType, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShare(int reqID, int platType, string content, string observer);
+
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShareWithActivity(int reqID, int platType, string content, string observer);
+
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKOneKeyShare(int reqID, string platTypes, string content, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShowShareMenu(int reqID, string platTypes, string content, int x, int y, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShowShareView(int reqID, int platType, string content, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKGetFriendsList(int reqID, int platType,int count, int page, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKFollowFriend(int reqID, int platform,string account, string observer);
+		
+		[DllImport("__Internal")]
+		private static extern string __iosShareSDKGetCredential(int platType);
+		
+		[DllImport("__Internal")]
+		private static extern bool __iosShareSDKIsClientInstalled(int platType);
+
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShareWithContentName(int reqID, int platform, string contentName, string customFields, string observer);
+
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShowShareMenuWithContentName(int reqID, string contentName, string customFields, string platTypes, int x, int y, string observer);
+
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShowShareViewWithContentName(int reqID, int platform, string contentName, string customFields, string observer);
+
+		[DllImport("__Internal")]
+		private static extern bool __iosShareSDKOpenMiniProgram(String userName, String path, int miniProgramType);
+
+        [DllImport("__Internal")]
+        private static extern bool __iosShareSDKWXRequestSendTokenToGetUser(String uid, String token);
+
+        [DllImport("__Internal")]
+        private static extern bool __iosShareSDKWXRequestToken(String observer);
+
+        [DllImport("__Internal")]
+        private static extern bool __iosShareSDKWXRefreshSendTokenToGetUser(String token);
+
+        [DllImport("__Internal")]
+        private static extern bool __iosShareSDKWXRefreshRequestToken(String observer);
+
+		[DllImport("__Internal")]
+		private static extern void __iosShareSDKShareWithCommand(string customFields, string observer);
+
+		public iOSImpl(GameObject go) {
+			try {
+				_callbackObjectName = go.name;
+			} catch(Exception e) {
+				Console.WriteLine("{0} Exception caught.", e);
+			}
+		}
+
+		public override void InitSDK(string appKey) {
+			_appKey = appKey;
+		}
+
+		public override void InitSDK(string appKey, string secret) {
+			_appKey = appKey;
+		}
+
+		public override void PrepareLoopShare() {
+			throw new NotImplementedException();
+		}
+
+		public override void setChannelId() {
+			throw new NotImplementedException();
+		}
+
+		public override void SetPlatformConfig(Hashtable configs) {
+			String json = MiniJSON.jsonEncode(configs);
+
+			if(Application.platform == RuntimePlatform.IPhonePlayer)
+			{
+				__iosShareSDKRegisterAppAndSetPltformsConfig(_appKey, json);
+			}
+		}
+
+		public override void Authorize(int reqId, PlatformType platform) {
+			__iosShareSDKAuthorize(reqId, (int)platform, _callbackObjectName);
+		}
+
+		public override void CancelAuthorize(PlatformType platform) {
+			__iosShareSDKCancelAuthorize((int)platform);
+		}
+
+		public override bool IsAuthorized(PlatformType platform) {
+			return __iosShareSDKHasAuthorized((int)platform);
+		}
+
+		public override bool IsClientValid(PlatformType platform) {
+			return __iosShareSDKIsClientInstalled((int)platform);
+		}
+
+		public override void GetUserInfo(int reqId, PlatformType platform) {
+			__iosShareSDKGetUserInfo(reqId, (int)platform, _callbackObjectName);
+		}
+
+		public override void ShareContent(int reqId, PlatformType platform, ShareContent content) {
+			__iosShareSDKShare(reqId, (int)platform, content.GetShareParamsStr(), _callbackObjectName);
+		}
+
+		public override void ShareContent(int reqId, PlatformType[] platforms, ShareContent content) {
+			string platTypesStr = null;
+			if (platforms != null) {
+				List<int> platTypesArr = new List<int>();
+				foreach (PlatformType type in platforms) {
+					platTypesArr.Add((int)type);
+				}
+				platTypesStr = MiniJSON.jsonEncode(platTypesArr.ToArray());
+			}
+
+			__iosShareSDKOneKeyShare(reqId, platTypesStr, content.GetShareParamsStr(), _callbackObjectName);
+		}
+
+		public override void ShowPlatformList(int reqId, PlatformType[] platforms, ShareContent content, int x, int y) {
+			string platTypesStr = null;
+			if (platforms != null) {
+				List<int> platTypesArr = new List<int>();
+				foreach (PlatformType type in platforms) {
+					platTypesArr.Add((int)type);
+				}
+				platTypesStr = MiniJSON.jsonEncode(platTypesArr.ToArray());
+			}
+
+			__iosShareSDKShowShareMenu(reqId, platTypesStr, content.GetShareParamsStr(), x, y, _callbackObjectName);
+		}
+
+		public override void ShowShareContentEditor(int reqId, PlatformType platform, ShareContent content) {
+			__iosShareSDKShowShareView(reqId, (int)platform, content.GetShareParamsStr(), _callbackObjectName);
+		}
+
+		public override void ShareWithContentName(int reqId, PlatformType platform, string contentName, Hashtable customFields) {
+			String customFieldsStr = MiniJSON.jsonEncode(customFields);
+			__iosShareSDKShareWithContentName(reqId, (int)platform, contentName, customFieldsStr,  _callbackObjectName);
+		}
+
+		public override void ShowPlatformListWithContentName(int reqId, string contentName, Hashtable customFields, PlatformType[] platforms, int x, int y) {
+			String customFieldsStr = MiniJSON.jsonEncode(customFields);
+			string platTypesStr = null;
+			if (platforms != null) {
+				List<int> platTypesArr = new List<int>();
+				foreach (PlatformType type in platforms) {
+					platTypesArr.Add((int)type);
+				}
+				platTypesStr = MiniJSON.jsonEncode(platTypesArr.ToArray());
+			}
+
+			__iosShareSDKShowShareMenuWithContentName(reqId, contentName, customFieldsStr, platTypesStr, x, y, _callbackObjectName);
+		}
+
+		public override void ShowShareContentEditorWithContentName(int reqId, PlatformType platform, string contentName, Hashtable customFields) {
+			String customFieldsStr = MiniJSON.jsonEncode(customFields);
+			__iosShareSDKShowShareViewWithContentName(reqId, (int)platform, contentName, customFieldsStr, _callbackObjectName);
+		}
+
+		public override void GetFriendList(int reqID, PlatformType platform, int count, int page) {
+			__iosShareSDKGetFriendsList(reqID, (int)platform, count, page, _callbackObjectName);
+		}
+
+		public override void AddFriend(int reqID, PlatformType platform, string account) {
+			__iosShareSDKFollowFriend(reqID, (int)platform, account, _callbackObjectName);
+		}
+
+		public override Hashtable GetAuthInfo(PlatformType platform) {
+			string credStr = __iosShareSDKGetCredential((int)platform);
+			return (Hashtable)MiniJSON.jsonDecode(credStr);
+		}
+
+		public override void DisableSSO(bool disable) {
+			Console.WriteLine ("#waring : no this interface on iOS");
+		}
+
+		public override bool openMiniProgram(string userName, string path, int miniProgramType) {
+			return __iosShareSDKOpenMiniProgram(userName, path, miniProgramType);
+		}
+
+		public override void getWXRequestToken() {
+            __iosShareSDKWXRequestToken(_callbackObjectName);
+		}
+
+		public override void getWXRefreshToken() {
+            __iosShareSDKWXRefreshRequestToken(_callbackObjectName);
+		}
+
+		public override void sendWXRefreshToken(string token) {
+            __iosShareSDKWXRefreshSendTokenToGetUser(token);
+		}
+
+		public override void sendWXRequestToken(string uid, string token) {
+            __iosShareSDKWXRequestSendTokenToGetUser(uid, token);
+		}
+
+		public override void shareSDKWithCommand(Hashtable content) {
+			String customFieldsStr = MiniJSON.jsonEncode(content);
+			__iosShareSDKShareWithCommand(customFieldsStr, _callbackObjectName);
+		}
+		
+		public override void ShareContentWithActivity(int reqID, PlatformType platform, ShareContent content) {
+			__iosShareSDKShareWithActivity(reqID, (int)platform, content.GetShareParamsStr(), _callbackObjectName);
+		}
+	}
+#endif
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/iOS/iOSImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cbdaf21a8fede4ecd9cf2ee50cf51e00
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 57 - 0
GameClient/Assets/ThirdParty/ShareSDK/iOSMobSDKImpl.cs

@@ -0,0 +1,57 @@
+using System;
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace cn.sharesdk.unity3d {
+#if UNITY_IPHONE || UNITY_IOS
+	public class iOSMobSDKImpl : MobSDKImpl {
+		private string _callbackObjectName = "Main Camera";
+		[DllImport("__Internal")]
+		private static extern void __iosMobSDKGetPolicy(bool type,string language, string observer);
+
+		[DllImport("__Internal")]
+		private static extern string __iosMobSDKGetCurrentLanguage();
+
+		[DllImport("__Internal")]
+		private static extern void __iosMobSDKSubmitPolicyGrantResult(bool granted);
+
+		[DllImport("__Internal")]
+		private static extern void __iosMobSDKSetAllowDialog(bool allowDialog);
+
+		[DllImport("__Internal")]
+		private static extern void __iosMobSDKSetPolicyUI(String backgroundColorRes, String positiveBtnColorRes, String negativeBtnColorRes);
+
+		public iOSMobSDKImpl(GameObject go) {
+			try {
+				_callbackObjectName = go.name;
+			} catch(Exception e) {
+				Console.WriteLine("{0} Exception caught.", e);
+			}
+		}
+
+		public override string getPrivacyPolicy(bool url, string language) {
+			__iosMobSDKGetPolicy(url, language, _callbackObjectName);
+			return "";
+		}
+
+		public override string getDeviceCurrentLanguage() {
+			return __iosMobSDKGetCurrentLanguage();
+		}
+
+		public override Boolean submitPolicyGrantResult(bool granted) {
+			__iosMobSDKSubmitPolicyGrantResult(granted);
+			return true;
+		}
+
+		public override void setAllowDialog(bool allowDialog) {
+			__iosMobSDKSetAllowDialog(allowDialog);
+		}
+
+		public override void setPolicyUi(string backgroundColorRes, string positiveBtnColorRes, string negativeBtnColorRes) {
+			__iosMobSDKSetPolicyUI(backgroundColorRes, positiveBtnColorRes, negativeBtnColorRes);
+		}
+	}
+#endif
+}

+ 11 - 0
GameClient/Assets/ThirdParty/ShareSDK/iOSMobSDKImpl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a2efe8e93579e450f8a2cf90a9f3c9c5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 5
GameClient/ProjectSettings/ProjectSettings.asset

@@ -250,23 +250,23 @@ PlayerSettings:
   useCustomMainManifest: 1
   useCustomLauncherManifest: 0
   useCustomMainGradleTemplate: 0
-  useCustomLauncherGradleManifest: 0
+  useCustomLauncherGradleManifest: 1
   useCustomBaseGradleTemplate: 1
-  useCustomGradlePropertiesTemplate: 0
+  useCustomGradlePropertiesTemplate: 1
   useCustomProguardFile: 0
   AndroidTargetArchitectures: 2
   AndroidTargetDevices: 0
   AndroidSplashScreenScale: 2
   androidSplashScreen: {fileID: 2800000, guid: f6233d8fa06ec8f47be121cb17376b7c, type: 3}
-  AndroidKeystoreName: '{inproject}: gfg.keystore'
-  AndroidKeyaliasName: gfg
+  AndroidKeystoreName: '{inproject}: wjy.keystore'
+  AndroidKeyaliasName: wjykey
   AndroidBuildApkPerCpuArchitecture: 0
   AndroidTVCompatibility: 0
   AndroidIsGame: 1
   AndroidEnableTango: 0
   androidEnableBanner: 1
   androidUseLowAccuracyLocation: 0
-  androidUseCustomKeystore: 0
+  androidUseCustomKeystore: 1
   m_AndroidBanners:
   - width: 320
     height: 180

BIN
GameClient/wjy.keystore