Преглед на файлове

Merge remote-tracking branch 'remotes/org/share'

# Conflicts:
#	GameClient/Assets/Game/HotUpdate/Views/RoleInfo/GMPanelView.cs
hexiaojie преди 1 година
родител
ревизия
1a708b8f18
променени са 100 файла, в които са добавени 2957 реда и са изтрити 261 реда
  1. 1 1
      GameClient/Assets/Demo.meta
  2. 800 0
      GameClient/Assets/Demo/Demo.cs
  3. 11 0
      GameClient/Assets/Demo/Demo.cs.meta
  4. 2 2
      GameClient/Assets/Editor/ToolsMenu.cs
  5. 1 0
      GameClient/Assets/Game/HotUpdate/Constant/ConstMessage.cs
  6. 10 1
      GameClient/Assets/Game/HotUpdate/Controller/GameController.cs
  7. 10 3
      GameClient/Assets/Game/HotUpdate/Data/RoleDataManager.cs
  8. 77 43
      GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/Login/LoginHelper.cs
  9. 3 1
      GameClient/Assets/Game/HotUpdate/Game.HotUpdate.asmdef
  10. 3 2
      GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs
  11. 261 0
      GameClient/Assets/Game/HotUpdate/Platform/QDDouYouManager.cs
  12. 11 0
      GameClient/Assets/Game/HotUpdate/Platform/QDDouYouManager.cs.meta
  13. 69 17
      GameClient/Assets/Game/HotUpdate/Platform/QDManager.cs
  14. 3 0
      GameClient/Assets/Game/HotUpdate/Platform/ShareSDK.meta
  15. 119 0
      GameClient/Assets/Game/HotUpdate/Platform/ShareSDK/QDShareManager.cs
  16. 3 0
      GameClient/Assets/Game/HotUpdate/Platform/ShareSDK/QDShareManager.cs.meta
  17. 9 9
      GameClient/Assets/Game/HotUpdate/Utils/LogUtil.cs
  18. 51 18
      GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs
  19. 3 1
      GameClient/Assets/Game/HotUpdate/Views/MainStory/StoryDialogView.cs
  20. 7 0
      GameClient/Assets/Game/HotUpdate/Views/OpenServerActivity/OpenServerActivityView.cs
  21. 52 5
      GameClient/Assets/Game/HotUpdate/Views/RoleInfo/GMPanelView.cs
  22. 5 5
      GameClient/Assets/Game/Launcher/LauncherConfig.cs
  23. 8 0
      GameClient/Assets/Game/Launcher/Platform/DouYou.meta
  24. 43 0
      GameClient/Assets/Game/Launcher/Platform/IDouYouSDKListener.cs
  25. 3 0
      GameClient/Assets/Game/Launcher/Platform/IDouYouSDKListener.cs.meta
  26. 302 0
      GameClient/Assets/Game/Launcher/Platform/QDDouYouManagerInit.cs
  27. 3 0
      GameClient/Assets/Game/Launcher/Platform/QDDouYouManagerInit.cs.meta
  28. 14 17
      GameClient/Assets/Game/Launcher/Platform/QDManagerInit.cs
  29. 3 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK.meta
  30. 24 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/IShareSDKListener.cs
  31. 3 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/IShareSDKListener.cs.meta
  32. 77 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/QDShareManagerInit.cs
  33. 3 0
      GameClient/Assets/Game/Launcher/Platform/ShareSDK/QDShareManagerInit.cs.meta
  34. 1 1
      GameClient/Assets/Game/Launcher/Version/VersionController.cs
  35. 1 1
      GameClient/Assets/Plugins/Android/AndroidManifest.xml.meta
  36. BIN
      GameClient/Assets/Plugins/Android/ShareSDKU3D.jar
  37. 1 1
      GameClient/Assets/Plugins/Android/ShareSDKU3D.jar.meta
  38. 0 0
      GameClient/Assets/Plugins/Android/assets/hykb_anti.ini
  39. 0 0
      GameClient/Assets/Plugins/Android/assets/hykb_auxs.ini
  40. 0 0
      GameClient/Assets/Plugins/Android/assets/hykb_login.ini
  41. 0 0
      GameClient/Assets/Plugins/Android/assets/hykb_pay.ini
  42. 8 0
      GameClient/Assets/Plugins/Android/assets/quicksdk.xml
  43. 4 0
      GameClient/Assets/Plugins/Android/assets/quicksdk.xml.meta
  44. 1 1
      GameClient/Assets/Plugins/Android/baseProjectTemplate.gradle.meta
  45. 1 1
      GameClient/Assets/Plugins/Android/gradleTemplate.properties.meta
  46. 1 1
      GameClient/Assets/Plugins/Android/launcherTemplate.gradle.meta
  47. BIN
      GameClient/Assets/Plugins/Android/libs/douyou-release.aar
  48. 32 0
      GameClient/Assets/Plugins/Android/libs/douyou-release.aar.meta
  49. BIN
      GameClient/Assets/Plugins/Android/libs/douyouTT-release.aar
  50. 32 0
      GameClient/Assets/Plugins/Android/libs/douyouTT-release.aar.meta
  51. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher.png
  52. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher.png.meta
  53. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_foreground.png
  54. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_foreground.png.meta
  55. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_round.png
  56. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_round.png.meta
  57. 1 1
      GameClient/Assets/Plugins/Android/res/mipmap-ldpi.meta
  58. 1 1
      GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher.png.meta
  59. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_foreground.png
  60. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_foreground.png.meta
  61. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_round.png
  62. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_round.png.meta
  63. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher.png
  64. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher.png.meta
  65. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_foreground.png
  66. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_foreground.png.meta
  67. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_round.png
  68. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_round.png.meta
  69. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher.png
  70. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher.png.meta
  71. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_foreground.png
  72. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_foreground.png.meta
  73. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_round.png
  74. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_round.png.meta
  75. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher.png
  76. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher.png.meta
  77. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_foreground.png
  78. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_foreground.png.meta
  79. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_round.png
  80. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_round.png.meta
  81. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher.png
  82. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher.png.meta
  83. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_foreground.png
  84. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_foreground.png.meta
  85. BIN
      GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_round.png
  86. 0 7
      GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_round.png.meta
  87. 8 0
      GameClient/Assets/Plugins/com/easy/bridge.meta
  88. 249 0
      GameClient/Assets/Plugins/com/easy/bridge/DouYouMainActivity.java
  89. 32 0
      GameClient/Assets/Plugins/com/easy/bridge/DouYouMainActivity.java.meta
  90. 0 8
      GameClient/Assets/Plugins/com/easy/bugly.meta
  91. 290 0
      GameClient/Assets/Resources/Scenes/GameLauncher.unity
  92. 8 0
      GameClient/Assets/Resources/mipmap.meta
  93. BIN
      GameClient/Assets/Resources/mipmap/ic_launcher.png
  94. 96 0
      GameClient/Assets/Resources/mipmap/ic_launcher.png.meta
  95. BIN
      GameClient/Assets/Resources/mipmap/ic_launcher_round.png
  96. 96 0
      GameClient/Assets/Resources/mipmap/ic_launcher_round.png.meta
  97. 8 0
      GameClient/Assets/Resources/mipmap/layout.meta
  98. 84 0
      GameClient/Assets/Resources/mipmap/layout/activity_main.xml
  99. 7 0
      GameClient/Assets/Resources/mipmap/layout/activity_main.xml.meta
  100. 1 1
      GameClient/Assets/Resources/mipmap/mipmap-hdpi.meta

+ 1 - 1
GameClient/Assets/Icons.meta → GameClient/Assets/Demo.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a6953a2349995cd41b3bdf12dfa52e21
+guid: 5385286e227ca4f5f8a440d911f5f233
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 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: 

+ 2 - 2
GameClient/Assets/Editor/ToolsMenu.cs

@@ -34,8 +34,8 @@ namespace GFGEditor
         {
             
         }
-#elif PT_QUICK
-        [MenuItem("QUICK/")]
+#elif PT_DOUYOU
+        [MenuItem("DouYou/")]
         public static void VersionTag()
         {
             

+ 1 - 0
GameClient/Assets/Game/HotUpdate/Constant/ConstMessage.cs

@@ -71,6 +71,7 @@ namespace GFGGame
         public const string LOGIN_SUCCESS = "LOGIN_SUCCESS"; //登录成功
         public const string LOGIN_FAIL = "LOGIN_FAIL"; //登录失败
         public const string SERVER_CHANGE = "SERVER_CHANGE"; //更换区服
+        public const string OUT_LOGIN = "OUT_LOGIN"; //退出登录
 
         public const string FIELD_RESULT = "FIELD_RESULT"; //田野结算
         public const string FIELD_TASK = "FIELD_TASK"; //田野任务

+ 10 - 1
GameClient/Assets/Game/HotUpdate/Controller/GameController.cs

@@ -293,6 +293,15 @@ namespace GFGGame
 
         public static void QuitToLoginView(bool logout, bool fromSdkLogoutCallback = false)
         {
+            switch (LauncherConfig.ChannelId)
+            {
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.LoginOutBefore();
+                    break;
+                default:
+                    break;
+            }
+
             FieldDataManager.Instance.waitToShowFieldFightEndView = false;
             GameGlobal.AutoSevenDayLoginView = true;
             GameGlobal.AutoDailySignView = true;
@@ -353,7 +362,7 @@ namespace GFGGame
             GameGlobal.zoneScene.GetComponent<AccountInfoComponent>()?.Clear();
             if (logout)
             {
-                    QDManager.Logout(fromSdkLogoutCallback);
+                    QDManager.Logout();
             }
             ViewManager.Hide<GuideView>();
             if(!ViewManager.isViewOpen(typeof(LoginView).FullName))

+ 10 - 3
GameClient/Assets/Game/HotUpdate/Data/RoleDataManager.cs

@@ -126,7 +126,11 @@ namespace GFGGame
         {
             get
             {
-                return GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+                if(GameGlobal.myNumericComponent != null)
+                {
+                    return GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+                }
+                return 1;
             }
         }
 
@@ -149,8 +153,11 @@ namespace GFGGame
         {
             get
             {
-                return GameGlobal.myNumericComponent.GetAsInt(NumericType.VipLevel);
-
+                if(GameGlobal.myNumericComponent != null)
+                {
+                    return GameGlobal.myNumericComponent.GetAsInt(NumericType.VipLevel);
+                }
+                return 0;
             }
         }
         public static int vipExp

+ 77 - 43
GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/Login/LoginHelper.cs

@@ -5,7 +5,8 @@ namespace ET
 {
     public static class LoginHelper
     {
-        public static async ETTask<(int, long)> LoginTest(Scene zoneScene, string address, string account, bool cancelDelete)
+        public static async ETTask<(int, long)> LoginTest(Scene zoneScene, string address, string account,
+            bool cancelDelete)
         {
             A2C_LoginAccount a2CLoginAccount = null;
             Session accountSession = null;
@@ -19,7 +20,8 @@ namespace ET
                     Version = GameConst.SERVER_VERSION,
                     PlatformId = LauncherConfig.platformId,
                     ChannelId = LauncherConfig.ChannelId,
-                    CancelDelete = cancelDelete
+                    CancelDelete = cancelDelete,
+                    Token = QDDouYouManager.Instance.token
                 });
             }
             catch (Exception e)
@@ -34,12 +36,14 @@ namespace ET
                 accountSession?.Dispose();
                 return (a2CLoginAccount.Error, a2CLoginAccount.DeleteTime);
             }
+
             OnLoginSuccess(zoneScene, a2CLoginAccount, accountSession, account);
 
             return (ErrorCode.ERR_Success, 0);
         }
 
-        public static async ETTask<(int, long)> Login(Scene zoneScene, string address, string account, string password, bool isMD5, bool cancelDelete)
+        public static async ETTask<(int, long)> Login(Scene zoneScene, string address, string account, string password,
+            bool isMD5, bool cancelDelete)
         {
             A2C_LoginAccount a2CLoginAccount = null;
             Session accountSession = null;
@@ -52,6 +56,7 @@ namespace ET
                 {
                     passwordMD5 = MD5Helper.stringMD5(password);
                 }
+
                 a2CLoginAccount = (A2C_LoginAccount)await accountSession.Call(new C2A_LoginAccount()
                 {
                     Account = account,
@@ -74,12 +79,14 @@ namespace ET
                 accountSession?.Dispose();
                 return (a2CLoginAccount.Error, a2CLoginAccount.DeleteTime);
             }
+
             OnLoginSuccess(zoneScene, a2CLoginAccount, accountSession, account);
 
             return (ErrorCode.ERR_Success, 0);
         }
 
-        public static void OnLoginSuccess(Scene zoneScene, A2C_LoginAccount a2CLoginAccount, Session accountSession, string account)
+        public static void OnLoginSuccess(Scene zoneScene, A2C_LoginAccount a2CLoginAccount, Session accountSession,
+            string account)
         {
             zoneScene.GetComponent<SessionComponent>().AccountSession = accountSession;
             accountSession.AddComponent<PingComponent>();
@@ -93,7 +100,8 @@ namespace ET
         }
 
 
-        public static async ETTask<int> Register(Scene zoneScene, string address, string account, string password, string name, string identityNum, string code)
+        public static async ETTask<int> Register(Scene zoneScene, string address, string account, string password,
+            string name, string identityNum, string code)
         {
             A2C_Register r2C_Register = null;
             Session session = null;
@@ -125,6 +133,7 @@ namespace ET
                 Log.Debug(e.ToString());
                 return ErrorCode.ERR_NetWorkError;
             }
+
             return ErrorCode.ERR_Success;
         }
 
@@ -134,11 +143,12 @@ namespace ET
 
             try
             {
-                a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(new C2A_GetServerInfos()
-                {
-                    AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
-                    Token = zoneScene.GetComponent<AccountInfoComponent>().Token
-                });
+                a2C_GetServerInfos = (A2C_GetServerInfos)await zoneScene.GetComponent<SessionComponent>().AccountSession
+                    ?.Call(new C2A_GetServerInfos()
+                    {
+                        AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
+                        Token = zoneScene.GetComponent<AccountInfoComponent>().Token
+                    });
             }
             catch (Exception e)
             {
@@ -150,6 +160,7 @@ namespace ET
             {
                 return a2C_GetServerInfos.Error;
             }
+
             zoneScene.GetComponent<ServerInfosComponent>()?.ServerInfoList?.Clear();
             foreach (var serverInfoProto in a2C_GetServerInfos.ServerInfosList)
             {
@@ -157,6 +168,7 @@ namespace ET
                 serverInfo.FromMessage(serverInfoProto);
                 zoneScene.GetComponent<ServerInfosComponent>().Add(serverInfo);
             }
+
             zoneScene.GetComponent<ServerInfosComponent>().SetRecentlyServerInfo(a2C_GetServerInfos.RecentId);
 
             await ETTask.CompletedTask;
@@ -169,12 +181,13 @@ namespace ET
 
             try
             {
-                a2C_GetRoles = (A2C_GetRoles)await zoneScene.GetComponent<SessionComponent>().AccountSession.Call(new C2A_GetRoles()
-                {
-                    AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
-                    Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
-                    ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
-                });
+                a2C_GetRoles = (A2C_GetRoles)await zoneScene.GetComponent<SessionComponent>().AccountSession.Call(
+                    new C2A_GetRoles()
+                    {
+                        AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
+                        Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
+                        ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
+                    });
             }
             catch (Exception e)
             {
@@ -204,13 +217,14 @@ namespace ET
             A2C_CreateRole a2C_CreateRole = null;
             try
             {
-                a2C_CreateRole = (A2C_CreateRole)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(new C2A_CreateRole
-                {
-                    AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
-                    Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
-                    Name = name,
-                    ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
-                });
+                a2C_CreateRole = (A2C_CreateRole)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(
+                    new C2A_CreateRole
+                    {
+                        AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
+                        Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
+                        Name = name,
+                        ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
+                    });
             }
             catch (Exception e)
             {
@@ -237,13 +251,14 @@ namespace ET
 
             try
             {
-                a2C_DeleteRole = (A2C_DeleteRole)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(new C2A_DeleteRole()
-                {
-                    AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
-                    Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
-                    RoleInfoId = roleId,
-                    ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
-                });
+                a2C_DeleteRole = (A2C_DeleteRole)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(
+                    new C2A_DeleteRole()
+                    {
+                        AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
+                        Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
+                        RoleInfoId = roleId,
+                        ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
+                    });
             }
             catch (Exception e)
             {
@@ -257,7 +272,10 @@ namespace ET
                 return a2C_DeleteRole.Error;
             }
 
-            int index = zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.FindIndex((info) => { return info.Id == a2C_DeleteRole.DeleteRoleInfoId; });
+            int index = zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.FindIndex((info) =>
+            {
+                return info.Id == a2C_DeleteRole.DeleteRoleInfoId;
+            });
             zoneScene.GetComponent<RoleInfosComponent>().RoleInfos.RemoveAt(index);
 
             await ETTask.CompletedTask;
@@ -270,12 +288,13 @@ namespace ET
 
             try
             {
-                a2C_GetRealmKey = (A2C_GetRealmKey)await zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(new C2A_GetRealmKey()
-                {
-                    AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
-                    Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
-                    ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
-                });
+                a2C_GetRealmKey = (A2C_GetRealmKey)await zoneScene.GetComponent<SessionComponent>().AccountSession
+                    ?.Call(new C2A_GetRealmKey()
+                    {
+                        AccountId = zoneScene.GetComponent<AccountInfoComponent>().AccountId,
+                        Token = zoneScene.GetComponent<AccountInfoComponent>().Token,
+                        ServerId = zoneScene.GetComponent<ServerInfosComponent>().CurrentServerId,
+                    });
             }
             catch (Exception e)
             {
@@ -303,7 +322,8 @@ namespace ET
             //1.连接Realm,获取分配的Gate
             R2C_LoginRealm r2C_LoginRealm = null;
 
-            Session session = zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(realmAddress));
+            Session session = zoneScene.GetComponent<NetKcpComponent>()
+                .Create(NetworkHelper.ToIPEndPoint(realmAddress));
             try
             {
                 r2C_LoginRealm = (R2C_LoginRealm)await session.Call(new C2R_LoginRealm()
@@ -318,6 +338,7 @@ namespace ET
                 session?.Dispose();
                 return ErrorCode.ERR_NetWorkError;
             }
+
             session?.Dispose();
 
             if (r2C_LoginRealm.Error != ErrorCode.ERR_Success)
@@ -326,7 +347,8 @@ namespace ET
             }
 
             LogUtil.LogDev($"GateAddress : {r2C_LoginRealm.GateAddress}");
-            Session gateSession = zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(r2C_LoginRealm.GateAddress));
+            Session gateSession = zoneScene.GetComponent<NetKcpComponent>()
+                .Create(NetworkHelper.ToIPEndPoint(r2C_LoginRealm.GateAddress));
             gateSession.AddComponent<PingComponent>();
             gateSession.AddComponent<DisConnectedCompnent>().SessionState = SessionState.Gate;
             zoneScene.GetComponent<SessionComponent>().GateSession = gateSession;
@@ -357,6 +379,7 @@ namespace ET
                 zoneScene.GetComponent<SessionComponent>().GateSession?.Dispose();
                 return g2C_LoginGate.Error;
             }
+
             LogUtil.LogDev("登陆gate成功!");
 
             //3.角色正式请求进入游戏逻辑服
@@ -377,12 +400,15 @@ namespace ET
                 //Log.Error(g2C_EnterGame.Error.ToString());
                 return g2C_EnterGame.Error;
             }
+
             zoneScene.GetComponent<PlayerComponent>().MyId = g2C_EnterGame.MyId;
-            var result = await GameGlobal.zoneScene.GetComponent<ObjectWait>().Wait<ET.WaitType.Wait_SceneChangeStart>();
-            if(result.Error == WaitTypeError.Cancel)
+            var result = await GameGlobal.zoneScene.GetComponent<ObjectWait>()
+                .Wait<ET.WaitType.Wait_SceneChangeStart>();
+            if (result.Error == WaitTypeError.Cancel)
             {
                 return ErrorCode.ERR_Cancel;
             }
+
             LogUtil.LogDev("角色进入游戏成功!");
             return ErrorCode.ERR_Success;
         }
@@ -392,7 +418,8 @@ namespace ET
             A2C_GetLatestNotice response = null;
             try
             {
-                response = (A2C_GetLatestNotice)await GameGlobal.zoneScene.GetComponent<SessionComponent>().AccountSession?.Call(new C2A_GetLatestNotice());
+                response = (A2C_GetLatestNotice)await GameGlobal.zoneScene.GetComponent<SessionComponent>()
+                    .AccountSession?.Call(new C2A_GetLatestNotice());
             }
             catch (Exception e)
             {
@@ -405,6 +432,7 @@ namespace ET
                 //Log.Error(response.Error.ToString());
                 return response.Error;
             }
+
             NoticeInfo noticeInfo = new NoticeInfo();
             noticeInfo.noticeId = response.NoticeId;
             noticeInfo.title = response.Title;
@@ -415,6 +443,7 @@ namespace ET
 
             return ErrorCode.ERR_Success;
         }
+
         public static async ETTask<(int, string)> ReqRandomRoleName()
         {
             A2C_GetRandomRoleName response = null;
@@ -423,8 +452,10 @@ namespace ET
             if (accountSession == null || accountSession.IsDisposed)
             {
                 notLogin = true;
-                accountSession = GameGlobal.zoneScene.GetComponent<NetKcpComponent>().Create(NetworkHelper.ToIPEndPoint(GameConfig.LoginAddress));
+                accountSession = GameGlobal.zoneScene.GetComponent<NetKcpComponent>()
+                    .Create(NetworkHelper.ToIPEndPoint(GameConfig.LoginAddress));
             }
+
             try
             {
                 response = (A2C_GetRandomRoleName)await accountSession?.Call(new C2A_GetRandomRoleName()
@@ -439,6 +470,7 @@ namespace ET
                 {
                     accountSession?.Dispose();
                 }
+
                 return (ErrorCode.ERR_NetWorkError, "");
             }
 
@@ -449,6 +481,7 @@ namespace ET
                 {
                     accountSession?.Dispose();
                 }
+
                 return (ErrorCode.ERR_NetWorkError, "");
             }
 
@@ -456,6 +489,7 @@ namespace ET
             {
                 accountSession?.Dispose();
             }
+
             return (ErrorCode.ERR_Success, response.Name);
         }
     }

+ 3 - 1
GameClient/Assets/Game/HotUpdate/Game.HotUpdate.asmdef

@@ -6,7 +6,9 @@
         "GUID:7a41fac89c3ce014e99efb3723e6a98e",
         "GUID:e34a5702dd353724aa315fb8011f08c3",
         "GUID:b0a84d582f6a6fa4185f67ce934d99c2",
-        "GUID:6e5063adab271564ba0098a06a8cebda"
+        "GUID:6e5063adab271564ba0098a06a8cebda",
+        "GUID:d9a5d47c553a04a28a7d21a3f3fc8dc3",
+        "GUID:9b1c19877f4294a9cb33ff38fc9f1c83"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 3 - 2
GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs

@@ -21,9 +21,10 @@ namespace GFGGame
             OperationSystem.Initialize();
             GameController.Start();
             Reporter reporter = GameObject.Find("Reporter").GetComponent<Reporter>();
-            if(LauncherConfig.ChannelId != (int)ChannelID.Test && reporter != null)
+            if ((LauncherConfig.ChannelId != (int)ChannelID.Test &&
+                 LauncherConfig.ChannelId != (int)ChannelID.DouYouTest) && reporter != null)
             {
-                reporter.numOfCircleToShow = 50;
+                reporter.numOfCircleToShow = 5;
             }
         }
 

+ 261 - 0
GameClient/Assets/Game/HotUpdate/Platform/QDDouYouManager.cs

@@ -0,0 +1,261 @@
+using System;
+using ET;
+using UnityEngine;
+using GFGGame.Launcher;
+
+namespace GFGGame
+{
+    public class QDDouYouManager : SingletonBase<QDDouYouManager>
+    {
+        public bool isLogining;
+        public string uid;
+        public string token;
+
+        public void Init()
+        {
+            Debug.Log("实例化DouYouSDKListener");
+            QDDouYouManagerInit.Instance.douYouSDKListener = new DouYouSDKListener();
+        }
+
+        public void Login()
+        {
+            // if (!string.IsNullOrEmpty(uid))
+            // {
+            //     EventAgent.DispatchEvent(ConstMessage.ON_PLATFORM_SDK_LOGINED, uid);
+            //     return;
+            // }
+            // if (isLogining) return;
+            // Debug.Log($"quick Login");
+            // isLogining = true;
+            QDDouYouManagerInit.Instance.ShowLogin();
+        }
+
+        public void OnCreateRole()
+        {
+            var zoneScene = GameGlobal.zoneScene;
+            var roleInfo = zoneScene.GetComponent<RoleInfosComponent>().GetCurrentRole();
+            
+            string serverName = zoneScene.GetComponent<ServerInfosComponent>().recentlyServerInfo.ServerName;
+
+            QDDouYouManagerInit.Instance.ReportRole((int)DouYouRoleLogReportType.CreateRole,
+                roleInfo.Id.ToString(), 1.ToString(), roleInfo.Name, roleInfo.ServerId.ToString(),
+                serverName);
+        }
+
+        public void OnEnterGame()
+        {
+            Debug.Log($"DouYou OnEnterGame");
+            var zoneScene = GameGlobal.zoneScene;
+            var roleInfo = zoneScene.GetComponent<RoleInfosComponent>().GetCurrentRole();
+            int lvl = GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+            string serverName = zoneScene.GetComponent<ServerInfosComponent>().recentlyServerInfo.ServerName;
+
+            QDDouYouManagerInit.Instance.ReportRoleLogin(roleInfo.Id.ToString(), lvl.ToString(), roleInfo.Name,
+                roleInfo.ServerId.ToString(), serverName);
+            QDDouYouManagerInit.Instance.ReportRole((int)DouYouRoleLogReportType.EnterGame,
+                roleInfo.Id.ToString(), lvl.ToString(), roleInfo.Name, roleInfo.ServerId.ToString(), serverName);
+        }
+
+        public void OnQuitToLoginView()
+        {
+            Debug.Log($"DouYou OnQuitToLoginView");
+        }
+
+        public void Logout()
+        {
+            Debug.Log($"Game.HotUpdate DouYou Logout");
+            QDDouYouManagerInit.Instance.ShowLogout();
+        }
+
+        public void LoginOutBefore()
+        {
+            var zoneScene = GameGlobal.zoneScene;
+            var roleInfo = zoneScene.GetComponent<RoleInfosComponent>().GetCurrentRole();
+            int lvl = GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+            string serverName = zoneScene.GetComponent<ServerInfosComponent>().recentlyServerInfo.ServerName;
+
+            QDDouYouManagerInit.Instance.ReportRole((int)DouYouRoleLogReportType.ExitGame,
+                roleInfo.Id.ToString(), lvl.ToString(), roleInfo.Name, roleInfo.ServerId.ToString(),
+                serverName);
+        }
+
+        public void Pay(int buyID, int count, string orderID, long price)
+        {
+            ShopCfg shopCfg = ShopCfgArray.Instance.GetCfg(buyID);
+            if (shopCfg == null)
+            {
+                Log.Error($"recharge {buyID} config not found!");
+                return;
+            }
+
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(shopCfg.itemId);
+            if (itemCfg == null)
+            {
+                Log.Error($"recharge {buyID} itemCfgId:{shopCfg.itemId} config not found!");
+                return;
+            }
+
+            var zoneScene = GameGlobal.zoneScene;
+            int lvl = GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+            var roleInfo = zoneScene.GetComponent<RoleInfosComponent>().GetCurrentRole();
+            string serverName = zoneScene.GetComponent<ServerInfosComponent>().recentlyServerInfo.ServerName;
+
+            //自定义参数
+            string other = orderID + "|gfg|" + roleInfo.Id;
+            QDDouYouManagerInit.Instance.ShowSwitchPayment(orderID, price.ToString(), buyID.ToString(),
+                shopCfg.itemName, itemCfg.desc,
+                roleInfo.ServerId.ToString(), serverName, roleInfo.Id.ToString(), roleInfo.Name, lvl.ToString(), other);
+        }
+
+        public void Exit()
+        {
+            var zoneScene = GameGlobal.zoneScene;
+            var roleInfo = zoneScene.GetComponent<RoleInfosComponent>().GetCurrentRole();
+            int lvl = GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+            string serverName = zoneScene.GetComponent<ServerInfosComponent>().recentlyServerInfo.ServerName;
+
+            QDDouYouManagerInit.Instance.ReportRole((int)DouYouRoleLogReportType.ExitGame,
+                roleInfo.Id.ToString(), lvl.ToString(), roleInfo.Name, roleInfo.ServerId.ToString(),
+                serverName);
+            QDDouYouManagerInit.Instance.ExitApp();
+        }
+    }
+
+    public class DouYouSDKListener : IDouYouSDKListener
+    {
+        // /// <summary>
+        // /// 测试消息
+        // /// </summary>
+        // /// <param name="message"></param>
+        // public void ReceiveMessageAb(string message)
+        // {
+        //     Debug.Log($"Game.HotUpdate ReceiveMessageAb:{message}");
+        // }
+
+        // /// <summary>
+        // /// SDK实例化成功
+        // /// </summary>
+        // /// <param name="message">SDK 实例化成功</param>
+        // public void InitSuccessAb(string message)
+        // {
+        //     Debug.Log("Game.HotUpdate InitSuccessAb: " + message);
+        //     //UniEvent.SendMessage(new LauncherEvent.InitPlatformResult() { success = true });
+        // }
+
+        /// <summary>
+        /// 登录成功 
+        /// </summary>
+        /// <param name="message">resUid + "|gfg|" + token</param>
+        public void LoginSuccessAb(string message)
+        {
+            Debug.Log("Game.HotUpdate LoginSuccessAb: " + message);
+            string[] result = message.Split(new string[] { "|gfg|" }, StringSplitOptions.None);
+
+            QDDouYouManager.Instance.isLogining = false;
+            QDDouYouManager.Instance.uid = result[0];
+            QDDouYouManager.Instance.token = result[1];
+            //登录成功的回调
+            EventAgent.DispatchEvent(ConstMessage.ON_PLATFORM_SDK_LOGINED, result[0]);
+        }
+
+        /// <summary>
+        /// 切换账号或退出登录后
+        /// </summary>
+        /// <param name="message">退出登录成功!</param>
+        public void OutLoginSuccessAb(string message)
+        {
+            Debug.Log("Game.HotUpdate OutLoginSuccessAb: " + message);
+            GameController.QuitToLoginView(true);
+            EventAgent.DispatchEvent(ConstMessage.OUT_LOGIN);
+        }
+
+        /// <summary>
+        /// 支付失败
+        /// </summary>
+        /// <param name="message">code + "|gfg|" + params.toString()</param>
+        public void PayFailAb(string message)
+        {
+            Debug.Log("Game.HotUpdate PayFailAb: " + message);
+            //改变临时订单状态为失败
+        }
+
+        /// <summary>
+        /// 支付成功
+        /// </summary>
+        /// <param name="message">code + "|gfg|" + params.toString()</param>
+        public void PaySuccessAb(string message)
+        {
+            Debug.Log("Game.HotUpdate PaySuccessAb" + message);
+            //改变临时订单状态为支付成功
+        }
+
+        #region SDK 生命周期函数
+
+        public void SdkOnStartAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnStartAb:{message}");
+        }
+
+        // public void SdkOnPauseAb(string message)
+        // {
+        //     Debug.Log($"Game.HotUpdate SdkOnPauseAb:{message}");
+        // }
+
+        // public void SdkOnResumeAb(string message)
+        // {
+        //     Debug.Log($"Game.HotUpdate SdkOnResumeAb:{message}");
+        // }
+
+        public void SdkOnStopAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnStopAb:{message}");
+        }
+
+        public void SdkOnDestroyAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnDestroyAb:{message}");
+        }
+
+        public void SdkOnRestartAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnRestartAb:{message}");
+        }
+
+        public void SdkOnBackPressedAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnBackPressedAb:{message}");
+        }
+
+        public void SdkOnNewIntentAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnNewIntentAb:{message}");
+        }
+
+        public void SdkOnConfigurationChangedAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnConfigurationChangedAb:{message}");
+        }
+
+        public void SdkOnSaveInstanceStateAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnSaveInstanceStateAb:{message}");
+        }
+
+        public void SdkOnActivityResultAb(string message)
+        {
+            Debug.Log($"Game.HotUpdate SdkOnActivityResultAb:{message}");
+        }
+
+        // public void SdkOnRequestPermissionResultAb(string message)
+        // {
+        //     Debug.Log($"Game.HotUpdate SdkOnRequestPermissionResultAb:{message}");
+        // }
+
+        // public void SdkOnWindowFocusChangedAb(string message)
+        // {
+        //     Debug.Log($"Game.HotUpdate SdkOnWindowFocusChangedAb:{message}");
+        // }
+
+        #endregion
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Platform/QDDouYouManager.cs.meta

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

+ 69 - 17
GameClient/Assets/Game/HotUpdate/Platform/QDManager.cs

@@ -3,15 +3,18 @@ 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;
             }
         }
@@ -21,13 +24,22 @@ namespace GFGGame
             ViewManager.Show<ModalStatusView>("登录中...");
             switch (LauncherConfig.ChannelId)
             {
-                default:
+                case (int)ChannelID.TapTap:
+
+                    break;
+                case (int)ChannelID.Test:
                     bool login = GameController.CheckLoginCache(true);
                     if (!login)
                     {
                         ViewManager.Hide<ModalStatusView>();
                         ViewManager.Show<LoginInputView>();
                     }
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.Login();
+                    break;
+                default:
                     break;
             }
         }
@@ -36,9 +48,17 @@ namespace GFGGame
         {
             switch (LauncherConfig.ChannelId)
             {
-                default:
+                case (int)ChannelID.TapTap:
 
                     break;
+                case (int)ChannelID.Test:
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.OnCreateRole();
+                    break;
+                default:
+                    break;
             }
         }
 
@@ -46,9 +66,17 @@ namespace GFGGame
         {
             switch (LauncherConfig.ChannelId)
             {
-                default:
+                case (int)ChannelID.TapTap:
 
                     break;
+                case (int)ChannelID.Test:
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.OnEnterGame();
+                    break;
+                default:
+                    break;
             }
         }
 
@@ -57,23 +85,39 @@ namespace GFGGame
         {
             switch (LauncherConfig.ChannelId)
             {
+                case (int)ChannelID.TapTap:
+
+                    break;
+                case (int)ChannelID.Test:
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.OnQuitToLoginView();
+                    break;
                 default:
-                    
                     break;
             }
         }
 
-        public static void Pay(int buyID, int count, string orderID, long Price)
+        public static void Pay(int buyID, int count, string orderID, long price)
         {
             switch (LauncherConfig.ChannelId)
             {
-                default:
+                case (int)ChannelID.TapTap:
 
                     break;
+                case (int)ChannelID.Test:
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.Pay(buyID, count, orderID, price);
+                    break;
+                default:
+                    break;
             }
         }
 
-        public static void Logout(bool fromSdkLogoutCallback)
+        public static void Logout()
         {
             GameGlobal.zoneScene.GetComponent<SessionComponent>()?.Disconnect();
             GameGlobal.zoneScene.GetComponent<ServerInfosComponent>()?.ServerInfoList?.Clear();
@@ -82,10 +126,19 @@ namespace GFGGame
             {
                 PlayerPrefs.DeleteKey(GameConst.PASSWORD_LAST_LOGIN_KEY);
             }
+            
             switch (LauncherConfig.ChannelId)
             {
+                case (int)ChannelID.TapTap:
+
+                    break;
+                case (int)ChannelID.Test:
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.Logout();
+                    break;
                 default:
-                    ViewManager.Show<LoginInputView>();
                     break;
             }
         }
@@ -97,20 +150,19 @@ namespace GFGGame
                 case (int)ChannelID.Test:
                     GameController.ShowExitAlert();
                     break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.Exit();
+                    break;
                 default:
-
                     break;
             }
         }
 
         public static bool IsTaptap
         {
-            get
-            {
-                return LauncherConfig.ChannelId == (int)ChannelID.TapTap;
-            }
+            get { return LauncherConfig.ChannelId == (int)ChannelID.TapTap; }
         }
-
+        
         public static bool IsHYKB
         {
             get

+ 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.ShareContent(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

+ 9 - 9
GameClient/Assets/Game/HotUpdate/Utils/LogUtil.cs

@@ -34,25 +34,26 @@ namespace GFGGame
 
         public static void LogDev(string content)
         {
-            if(LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test)
+            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test ||
+                LauncherConfig.ChannelId == (int)ChannelID.DouYouTest)
             {
                 Debug.Log($"dev log : {content}");
             }
-
         }
 
         public static void LogFormatDev(string content, params object[] args)
         {
-            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test)
+            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test ||
+                LauncherConfig.ChannelId == (int)ChannelID.DouYouTest)
             {
                 Debug.LogFormat($"dev log : {content}", args);
             }
-
         }
 
         public static void LogWarningDev(string content)
         {
-            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test)
+            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test ||
+                LauncherConfig.ChannelId == (int)ChannelID.DouYouTest)
             {
                 Debug.LogWarning($"dev warning {content}");
             }
@@ -60,12 +61,11 @@ namespace GFGGame
 
         public static void LogWarningFormatDev(string content, params object[] args)
         {
-            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test)
+            if (LauncherConfig.onDebug > 0 || LauncherConfig.ChannelId == (int)ChannelID.Test ||
+                LauncherConfig.ChannelId == (int)ChannelID.DouYouTest)
             {
                 Debug.LogWarningFormat($"dev warning {content}", args);
             }
         }
-        
     }
-}
-
+}

+ 51 - 18
GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs

@@ -16,7 +16,6 @@ namespace GFGGame
 
         public override void Dispose()
         {
-
             if (_sceneObject != null)
             {
                 GameObject.DestroyImmediate(_sceneObject);
@@ -28,6 +27,7 @@ namespace GFGGame
                 _ui.Dispose();
                 _ui = null;
             }
+
             base.Dispose();
         }
 
@@ -59,50 +59,52 @@ namespace GFGGame
             _ui.m_loaEventc.onClick.Add(() => { FullScreenTextController.Show("event:c"); });
             _ui.m_btnAgree.onClick.Add(OnBtnAgreeCklick);
         }
+
         protected override void AddEventListener()
         {
             base.AddEventListener();
             EventAgent.AddEventListener(ConstMessage.SERVER_CHANGE, OnSeverChangeListener);
             EventAgent.AddEventListener(ConstMessage.LOGIN_SUCCESS, OnLoginSuccess);
             EventAgent.AddEventListener(ConstMessage.ON_PLATFORM_SDK_LOGINED, OnPlatformLogined);
+            EventAgent.AddEventListener(ConstMessage.OUT_LOGIN, OnOutLoginSuccess);
         }
+
         protected override void OnShown()
         {
             base.OnShown();
             MusicManager.Instance.PlayCroutine(ResPathUtil.GetMusicPath(ConstMusicName.DEFAULT));
             if (_sceneObject == null)
             {
-                _sceneObject = PrefabManager.Instance.InstantiateSync(ResPathUtil.GetLoginResPath("LoginSkin1/SceneLogin"));
+                _sceneObject =
+                    PrefabManager.Instance.InstantiateSync(ResPathUtil.GetLoginResPath("LoginSkin1/SceneLogin"));
             }
+
             // SceneController.UpdateLoginScene(_sceneObject);
             ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
             ServerInfo recentlyServerInfo = serverInfosComponent.recentlyServerInfo;
             UpdateServer(recentlyServerInfo);
             _ui.m_btnAgree.selected = LocalCache.GetBool(GameConst.LAST_LOGIN_IS_VISITOR_KEY, false);
             _ui.m_btnAgree.selected = true;
-
-            if(GameConfig.openTime > TimeHelper.ClientNow())
+            if (GameConfig.openTime > TimeHelper.ClientNow())
             {
                 var date = DateTimeUtil.LongTimeStampToDateTime(GameConfig.openTime);
                 string minuteText = "";
-                if(date.Minute > 0)
+                if (date.Minute > 0)
                 {
                     minuteText = date.Minute + "分";
                 }
+
                 AlertUI.Show($"    亲爱的研究员,万世镜将于{date.Year}年{date.Month}月{date.Day}日{date.Hour}点{minuteText}开放,敬请期待!")
-                        .SetLeftButton(true, "好的", (obj) =>
-                        {
-                            Application.Quit();
-                        });
+                    .SetLeftButton(true, "好的", (obj) => { Application.Quit(); });
                 return;
             }
+
             if (!autoLogined)
             {
                 autoLogined = true;
                 ResetLoginButton();
                 TryLogin();
             }
-
         }
 
         protected override void OnHide()
@@ -113,14 +115,17 @@ namespace GFGGame
                 PrefabManager.Instance.Restore(_sceneObject);
                 _sceneObject = null;
             }
+
             base.OnHide();
         }
+
         protected override void RemoveEventListener()
         {
             base.RemoveEventListener();
             EventAgent.RemoveEventListener(ConstMessage.SERVER_CHANGE, OnSeverChangeListener);
             EventAgent.RemoveEventListener(ConstMessage.LOGIN_SUCCESS, OnLoginSuccess);
             EventAgent.RemoveEventListener(ConstMessage.ON_PLATFORM_SDK_LOGINED, OnPlatformLogined);
+            EventAgent.RemoveEventListener(ConstMessage.OUT_LOGIN, OnOutLoginSuccess);
         }
 
         private void UpdateServer(ServerInfo info)
@@ -131,8 +136,10 @@ namespace GFGGame
                 _ui.m_btnChange.visible = false;
                 return;
             }
+
             _ui.m_btnChange.visible = serverInfosComponent.ServerInfoList.Count > 1;
-            _ui.m_btnChange.title = string.Format("{0}区  {1}", NumberUtil.GetChiniseNumberText((int)info.Id), info.ServerName);
+            _ui.m_btnChange.title =
+                string.Format("{0}区  {1}", NumberUtil.GetChiniseNumberText((int)info.Id), info.ServerName);
 
             LogServerHelperHttp.SendNodeLog((int)LogNode.ShowSelectServer);
         }
@@ -165,18 +172,23 @@ namespace GFGGame
 
             UpdateServer(serverInfosComponent.ServerInfoList[serverInfosComponent.CurrentServerId]);
         }
+
         private void OnBtnChangeClick()
         {
             ViewManager.Show<ServerListView>();
         }
+
         private void OnClickBtnNotice()
         {
-            if (NoticeDataManager.Instance.LastNoticeInfo == null || NoticeDataManager.Instance.LastNoticeInfo.noticeId == 0)
+            if (NoticeDataManager.Instance.LastNoticeInfo == null ||
+                NoticeDataManager.Instance.LastNoticeInfo.noticeId == 0)
             {
                 PromptController.Instance.ShowFloatTextPrompt("暂无公告发布");
                 return;
             }
-            ViewManager.Show<SystemNoticeView>(new object[] { NoticeDataManager.Instance.LastNoticeInfo.title, NoticeDataManager.Instance.LastNoticeInfo.content });
+
+            ViewManager.Show<SystemNoticeView>(new object[]
+                { NoticeDataManager.Instance.LastNoticeInfo.title, NoticeDataManager.Instance.LastNoticeInfo.content });
         }
 
         private void OnClickBtnStart()
@@ -187,8 +199,25 @@ namespace GFGGame
         private void OnClickBtnLogout()
         {
             ResetLoginButton();
-            QDManager.Logout(false);
+
+            switch (LauncherConfig.ChannelId)
+            {
+                case (int)ChannelID.TapTap:
+
+                    break;
+                case (int)ChannelID.Test:
+
+                    break;
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManager.Instance.LoginOutBefore();
+                    break;
+                default:
+                    break;
+            }
+
+            QDManager.Logout();
         }
+
         private void OnClickBtnAge()
         {
             ViewManager.Show<SystemNoticeView>(new object[] { LoginController.ageTipsTitle, LoginController.ageTips });
@@ -208,13 +237,12 @@ namespace GFGGame
                     {
                         LauncherConfig.statusPrompt = "游戏正在更新维护中,请稍后再试。";
                     }
+
                     AlertSystem.Show(LauncherConfig.statusPrompt)
-                        .SetLeftButton(true, "知道了", (data) =>
-                        {
-                            Application.Quit();
-                        });
+                        .SetLeftButton(true, "知道了", (data) => { Application.Quit(); });
                     return;
                 }
+
                 var serverInfosComponent = GameGlobal.zoneScene.GetComponent<ServerInfosComponent>();
                 if (serverInfosComponent.ServerInfoList.Count <= 0)
                 {
@@ -227,10 +255,15 @@ namespace GFGGame
                         PromptController.Instance.ShowFloatTextPrompt("请仔细阅读并同意游戏用户协议、隐私保护指引、儿童隐私政策");
                         return;
                     }
+
                     LoginController.GetRoles().Coroutine();
                 }
             });
+        }
 
+        private void OnOutLoginSuccess(EventContext context)
+        {
+            ResetLoginButton();
         }
 
         private void ResetLoginButton()

+ 3 - 1
GameClient/Assets/Game/HotUpdate/Views/MainStory/StoryDialogView.cs

@@ -146,7 +146,9 @@ namespace GFGGame
             IsTeaParty = (bool)datas[4];
             _autoPlay = _lastStartAutoPlay;
 
-            if (LauncherConfig.ChannelId != (int)ChannelID.Test && !InstanceZonesDataManager.CheckLevelPass(MainStoryDataManager.currentLevelCfgId))
+            if ((LauncherConfig.ChannelId != (int)ChannelID.Test &&
+                 LauncherConfig.ChannelId != (int)ChannelID.DouYouTest) &&
+                !InstanceZonesDataManager.CheckLevelPass(MainStoryDataManager.currentLevelCfgId))
             {
                 // 临时设置都可以跳过对话
                 skipable = false;

+ 7 - 0
GameClient/Assets/Game/HotUpdate/Views/OpenServerActivity/OpenServerActivityView.cs

@@ -123,6 +123,13 @@ namespace GFGGame
                 return;
             }
             ActivityOpenCfg activityOpenCfg = ActivityOpenCfgArray.Instance.GetCfg(actLimitId);
+            if (actLimitId <= 0)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("活动已结束");
+                Timers.inst.Remove(UpdateTime);
+                OnClickBtnBack();
+                return;
+            }
             long time = TimeUtil.DateTimeToTimestamp(activityOpenCfg.endTime) - TimeHelper.ServerNow();
             string strTime = TimeUtil.FormattingTimeTo_DD_HH_mm(time);
             string[] str = strTime.Split(':');

+ 52 - 5
GameClient/Assets/Game/HotUpdate/Views/RoleInfo/GMPanelView.cs

@@ -1,6 +1,7 @@
 using FairyGUI;
 using System.Collections.Generic;
 using System.Text.RegularExpressions;
+using cn.sharesdk.unity3d;
 using UI.RoleInfo;
 using ET;
 
@@ -16,6 +17,7 @@ namespace GFGGame
             {
                 _ui.Dispose();
             }
+
             _ui = null;
             base.Dispose();
         }
@@ -132,6 +134,7 @@ namespace GFGGame
                 {
                     messageSuc = "已扣除物品" + itemId + "*" + itemNum;
                 }
+
                 GMController.SendGMCommand($"getItem {itemId} {itemNum}", messageSuc).Coroutine();
             }
             else
@@ -148,6 +151,7 @@ namespace GFGGame
                 PromptController.Instance.ShowFloatTextPrompt("请输入数字");
                 return;
             }
+
             string lv = _ui.m_ComBtn.m_txtRoleLv.text;
             string messageSuc = "等级提升至" + lv;
 
@@ -164,6 +168,7 @@ namespace GFGGame
                 PromptController.Instance.ShowFloatTextPrompt("请输入数字");
                 return;
             }
+
             string content = _ui.m_ComBtn.m_txtChapter.text + " " + _ui.m_ComBtn.m_txtChapterLv.text;
             string messageSuc = string.Format("当前关卡第{0}章第{1}关", _ui.m_ComBtn.m_txtChapter.text,
                 _ui.m_ComBtn.m_txtChapterLv.text);
@@ -255,6 +260,7 @@ namespace GFGGame
                 {
                     continue;
                 }
+
                 LeagueSkillCfg skillCfg = LeagueSkillCfgArray.Instance.GetCfg(skillId);
                 // List<LeagueSkillCfg> lastSkillCfgs = LeagueSkillCfgArray.Instance.GetCfgsBytypeAndlayer(_type, skillCfg.layer - 1);
                 // for (int j = 0; j < lastSkillCfgs.Count; j++)
@@ -271,8 +277,10 @@ namespace GFGGame
                     PromptController.Instance.ShowFloatTextPrompt("消耗不足");
                     break;
                 }
+
                 await SkillSProxy.ReqActiveSkill(SkillType.LeagueSkill, skillId);
             }
+
             PromptController.Instance.ShowFloatTextPrompt("学习结束");
         }
 
@@ -283,6 +291,7 @@ namespace GFGGame
             {
                 GameGlobal.skipGuide = true;
             }
+
             OnClickBtnGetAllDressUpItem();
             OnClickBtnGetAllCardItem();
 
@@ -298,7 +307,8 @@ namespace GFGGame
         {
             var chapterCount = StoryChapterCfgArray.Instance.GetCfgsBysubType(ConstInstanceZonesSubType.Normal).Count;
             _ui.m_ComBtn.m_txtChapter.text = "" + chapterCount;
-            StoryChapterCfg storyChapterCfg = StoryChapterCfgArray.Instance.GetCfgBysubTypeAndorder(ConstInstanceZonesSubType.Normal, chapterCount);
+            StoryChapterCfg storyChapterCfg =
+                StoryChapterCfgArray.Instance.GetCfgBysubTypeAndorder(ConstInstanceZonesSubType.Normal, chapterCount);
             _ui.m_ComBtn.m_txtChapterLv.text = "" + storyChapterCfg.levelCount;
         }
 
@@ -306,6 +316,7 @@ namespace GFGGame
         {
             FightDataManager.Instance.maxFightSpeed = 8;
         }
+
         private void OnClickBtnMaterials()
         {
             List<ItemCfg> itemCfgs = ItemCfgArray.Instance.GetCfgsByitemType(ConstItemType.ITEM);
@@ -316,7 +327,6 @@ namespace GFGGame
                 string successMessage = string.Format("已获取 【{0} * {1}】", itemCfgs[i].name, 1000);
                 GMController.SendGMCommand("getItem " + content, successMessage).Coroutine();
             }
-
         }
 
         private void OnClickBtnGetSuit()
@@ -327,6 +337,7 @@ namespace GFGGame
             {
                 PromptController.Instance.ShowFloatTextPrompt("套装配置不存在");
             }
+
             for (int i = 0; i < suitCfg.partsArr.Length; i++)
             {
                 string content = string.Format("{0} {1}", suitCfg.partsArr[i], 1);
@@ -334,6 +345,7 @@ namespace GFGGame
                 string successMessage = string.Format("已获取 【{0} * {1}】", name, 1000);
                 GMController.SendGMCommand("getItem " + content, successMessage).Coroutine();
             }
+
             for (int i = 0; i < suitCfg.partsOptionalArr.Length; i++)
             {
                 string content = string.Format("{0} {1}", suitCfg.partsOptionalArr[i], 1);
@@ -342,6 +354,7 @@ namespace GFGGame
                 GMController.SendGMCommand("getItem " + content, successMessage).Coroutine();
             }
         }
+
         private void OnClickBtnGM(EventContext context)
         {
             string content = _ui.m_inputGM.text;
@@ -351,6 +364,7 @@ namespace GFGGame
                 PromptController.Instance.ShowFloatTextPrompt("请按照指定格式输入物品信息", MessageType.ERR);
                 return;
             }
+
             switch (infos[0])
             {
                 case "cjstime":
@@ -359,6 +373,7 @@ namespace GFGGame
                         PromptController.Instance.ShowFloatTextPrompt("请输入以秒为单位的正确的时间戳");
                         return;
                     }
+
                     LuckyBoxDataManager.Instance.startTime = int.Parse(infos[1]);
                     PromptController.Instance.ShowFloatTextPrompt("设置成功");
 
@@ -369,6 +384,7 @@ namespace GFGGame
                         PromptController.Instance.ShowFloatTextPrompt("请输入以秒为单位的正确的时间戳");
                         return;
                     }
+
                     LuckyBoxDataManager.Instance.endTime = int.Parse(infos[1]);
                     PromptController.Instance.ShowFloatTextPrompt("设置成功");
                     break;
@@ -397,17 +413,48 @@ namespace GFGGame
             if (string.IsNullOrEmpty(num)) return;
             GMController.SendGMCommand($"addNum {roleNumType} {num}", "").Coroutine();
         }
+
         private void OnClickShareTest1(EventContext context = null)
         {
-
+            QDShareManager.Instance.SubmitPolicyGrantResult();
+            ShareContent content = new ShareContent();
+            content.SetText("this is a test string.");
+            content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/1.jpg");
+            content.SetTitle("test title");
+            content.SetSite("Mob-ShareSDK");
+            content.SetComment("test description");
+            content.SetShareType(ContentType.Image);
+            PlatformType[] platformTypes = new[]
+                { PlatformType.WeChatMoments, PlatformType.WeChat, PlatformType.WeChatFavorites };
+            QDShareManager.Instance.ShowPlatformList(platformTypes, content);
         }
+
         private void OnClickShareTest2(EventContext context = null)
         {
-
+            ShareContent content = new ShareContent();
+            content.SetText("this is a test string.");
+            content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/1.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);
+            QDShareManager.Instance.ShowShareContentEditor(PlatformType.WeChat, content);
         }
+
         private void OnClickShareTest3(EventContext context = null)
         {
-
+            ShareContent content = new ShareContent();
+            content.SetText("this is a test string.");
+            content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/1.jpg");
+            content.SetTitle("test title");
+            content.SetSite("Mob-ShareSDK");
+            content.SetComment("test description");
+            content.SetShareType(ContentType.Image);
+            QDShareManager.Instance.ShareContent(PlatformType.WeChat, content);
         }
     }
 }

+ 5 - 5
GameClient/Assets/Game/Launcher/LauncherConfig.cs

@@ -53,11 +53,10 @@ namespace GFGGame
             netType = EnumNetType.PUBLIC;
             cfgName = "cfg_taptap";
             ChannelId = (int)ChannelID.TapTap;
-#elif PT_QUICK
-            netType = EnumNetType.PUBLIC;
-            cfgName = "cfg_quick";
-            var quickChannel = QuickSDK.getInstance().channelType();
-            ChannelId = ChannelIDUtil.GetGameChannelID(quickChannel);
+#elif PT_DOUYOU
+            netType = EnumNetType.LOCAL;
+            cfgName = "cfg_sdkTest";
+            ChannelId = 22;
 #elif PT_IOS
             netType = EnumNetType.PUBLIC;
             cfgName = "cfg_ios";
@@ -71,6 +70,7 @@ namespace GFGGame
             cfgName = "cfg_local";
             //launcherRootUrl = "http://10.108.64.189:81/";
 #endif
+
             cfgUrl = launcherRootUrl + "platform/{cfgName}.json";
         }
 

+ 8 - 0
GameClient/Assets/Game/Launcher/Platform/DouYou.meta

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

+ 43 - 0
GameClient/Assets/Game/Launcher/Platform/IDouYouSDKListener.cs

@@ -0,0 +1,43 @@
+namespace GFGGame.Launcher
+{
+    public interface IDouYouSDKListener
+    {
+        //public void ReceiveMessageAb(string message);
+
+        //public void InitSuccessAb(string message);
+
+        public void LoginSuccessAb(string message);
+
+        public void OutLoginSuccessAb(string message);
+
+        public void PayFailAb(string message);
+
+        public void PaySuccessAb(string message);
+
+        public void SdkOnStartAb(string message);
+
+        //public void SdkOnPauseAb(string message);
+
+        //public void SdkOnResumeAb(string message);
+
+        public void SdkOnStopAb(string message);
+
+        public void SdkOnDestroyAb(string message);
+
+        public void SdkOnRestartAb(string message);
+
+        public void SdkOnBackPressedAb(string message);
+
+        public void SdkOnNewIntentAb(string message);
+
+        public void SdkOnConfigurationChangedAb(string message);
+
+        public void SdkOnSaveInstanceStateAb(string message);
+
+        public void SdkOnActivityResultAb(string message);
+
+        //public void SdkOnRequestPermissionResultAb(string message);
+
+        //public void SdkOnWindowFocusChangedAb(string message);
+    }
+}

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

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c168a0d8ddff434888ae2bc9459fb14d
+timeCreated: 1716878448

+ 302 - 0
GameClient/Assets/Game/Launcher/Platform/QDDouYouManagerInit.cs

@@ -0,0 +1,302 @@
+using DouYouSdk;
+using UniFramework.Event;
+using UnityEngine;
+
+namespace GFGGame.Launcher
+{
+    public class QDDouYouManagerInit : SingletonBase<QDDouYouManagerInit>
+    {
+        public IDouYouSDKListener douYouSDKListener;
+
+        private static AndroidJavaClass _unityPlayerClass;
+
+        private static AndroidJavaObject _douYouMainActivity;
+
+        public void InitSDK(string adId)
+        {
+            if (_unityPlayerClass == null)
+            {
+                _unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+            }
+
+            if (_douYouMainActivity == null)
+            {
+                _douYouMainActivity = _unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
+            }
+
+            DouYouSDKHandler eventHandler = GameObject.Find("DouYouSDKGameObject")?.GetComponent<DouYouSDKHandler>();
+            if (eventHandler == null)
+            {
+                GameObject gameObject = new GameObject("DouYouSDKGameObject");
+                gameObject.AddComponent<DouYouSDKHandler>();
+                GameObject.DontDestroyOnLoad(gameObject);
+            }
+
+            Instance.CallDouYouMainActivity("initDouYou", adId);
+        }
+
+        //调用桥接的 DouYouMainActivity.java 对象的方法
+        private void CallDouYouMainActivity(string functionName, params object[] args)
+        {
+            _douYouMainActivity.Call(functionName, args);
+        }
+
+        //临时获取adId,之后需要配置到配置文件里面,已达到热更
+        public string GetAdId()
+        {
+            return "123";
+        }
+
+        /// <summary>
+        /// 显示登录界面
+        /// </summary>
+        public void ShowLogin()
+        {
+            Instance.CallDouYouMainActivity("extShowLogin");
+        }
+
+        /// <summary>
+        /// 角色登录数据上报
+        /// </summary>
+        /// <param name="id">角色ID</param>
+        /// <param name="level">角色等级</param>
+        /// <param name="nickname">角色名称</param>
+        /// <param name="sid">区服ID</param>
+        /// <param name="serverName">区服名称</param>
+        public void ReportRoleLogin(string id, string level, string nickname, string sid, string serverName)
+        {
+            Instance.CallDouYouMainActivity("extReportRoleLogin", id, level, nickname, sid, serverName);
+        }
+
+        /// <summary>
+        /// 角色数据上报
+        /// </summary>
+        /// <param name="logType">场景(1 - 进入游戏、2 - 创建角色、3 - 角色升级、4 - 退出、5 - 充值)</param>
+        /// <param name="id">角色ID</param>
+        /// <param name="level">角色等级</param>
+        /// <param name="nickname">角色名称</param>
+        /// <param name="sid">区服ID</param>
+        /// <param name="serverName">区服名称</param>
+        public void ReportRole(int logType, string id, string level, string nickname, string sid, string serverName)
+        {
+            Instance.CallDouYouMainActivity("extReportRole", logType, id, level, nickname, sid, serverName);
+        }
+
+        /// <summary>
+        /// 退出登录
+        /// </summary>
+        public void ShowLogout()
+        {
+            Instance.CallDouYouMainActivity("extShowLogout");
+        }
+
+        /// <summary>
+        /// 退出app
+        /// </summary>
+        public void ExitApp()
+        {
+            Instance.CallDouYouMainActivity("extExitApp");
+        }
+
+        /// <summary>
+        /// 调起支付
+        /// </summary>
+        /// <param name="orderId">订单号</param>
+        /// <param name="orderMoney">订单金额(元)</param>
+        /// <param name="productId">产品ID</param>
+        /// <param name="productName">产品名称</param>
+        /// <param name="productDesc">产品描述</param>
+        /// <param name="roleServiceId">区服ID</param>
+        /// <param name="serviceName">区服名称</param>
+        /// <param name="roleId">角色ID</param>
+        /// <param name="roleName">角色名称</param>
+        /// <param name="roleLevel">角色等级</param>
+        /// <param name="other">透传参数</param>
+        public void ShowSwitchPayment(string orderId, string orderMoney, string productId, string productName,
+            string productDesc, string roleServiceId, string serviceName, string roleId, string roleName,
+            string roleLevel, string other)
+        {
+            Instance.CallDouYouMainActivity("extShowSwitchPayment", orderId, orderMoney, productId, productName,
+                productDesc, roleServiceId, serviceName, roleId, roleName, roleLevel, other);
+        }
+
+        /// <summary>
+        /// cp激励广告订单id  登录后用户uid  角色id
+        /// </summary>
+        public void OpenGroMoreAD()
+        {
+            Instance.CallDouYouMainActivity("extOpenGroMoreAD");
+        }
+
+        public class DouYouSDKHandler : AbDouYouSDKHandler
+        {
+            /// <summary>
+            /// 测试消息
+            /// </summary>
+            /// <param name="message"></param>
+            public override void ReceiveMessageAb(string message)
+            {
+                Debug.Log($"ReceiveMessageAb:{message}");
+            }
+
+            /// <summary>
+            /// SDK实例化成功
+            /// </summary>
+            /// <param name="message">SDK 实例化成功</param>
+            public override void InitSuccessAb(string message)
+            {
+                Debug.Log("InitSuccessAb: " + message);
+                UniEvent.SendMessage(new LauncherEvent.InitPlatformResult() { success = true });
+            }
+
+            /// <summary>
+            /// 登录成功 
+            /// </summary>
+            /// <param name="message">resUid + "|gfg|" + token</param>
+            public override void LoginSuccessAb(string message)
+            {
+                Debug.Log("LoginSuccessAb: " + message);
+                QDDouYouManagerInit.Instance.douYouSDKListener.LoginSuccessAb(message);
+            }
+
+            /// <summary>
+            /// 切换账号或退出登录后
+            /// </summary>
+            /// <param name="message">退出登录成功!</param>
+            public override void OutLoginSuccessAb(string message)
+            {
+                Debug.Log("OutLoginSuccessAb: " + message);
+                QDDouYouManagerInit.Instance.douYouSDKListener.OutLoginSuccessAb(message);
+            }
+
+            /// <summary>
+            /// 支付失败
+            /// </summary>
+            /// <param name="message">code + "|gfg|" + params.toString()</param>
+            public override void PayFailAb(string message)
+            {
+                Debug.Log("PayFailAb: " + message);
+                QDDouYouManagerInit.Instance.douYouSDKListener.PayFailAb(message);
+            }
+
+            /// <summary>
+            /// 支付成功
+            /// </summary>
+            /// <param name="message">code + "|gfg|" + params.toString()</param>
+            public override void PaySuccessAb(string message)
+            {
+                Debug.Log("PaySuccessAb" + message);
+                QDDouYouManagerInit.Instance.douYouSDKListener.PaySuccessAb(message);
+            }
+
+            #region SDK 生命周期函数
+
+            public override void SdkOnStartAb(string message)
+            {
+                Debug.Log($"SdkOnStartAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnStartAb(message);
+            }
+
+            public override void SdkOnPauseAb(string message)
+            {
+                Debug.Log($"SdkOnPauseAb:{message}");
+            }
+
+            public override void SdkOnResumeAb(string message)
+            {
+                Debug.Log($"SdkOnResumeAb:{message}");
+            }
+
+            public override void SdkOnStopAb(string message)
+            {
+                Debug.Log($"SdkOnStopAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnStopAb(message);
+            }
+
+            public override void SdkOnDestroyAb(string message)
+            {
+                Debug.Log($"SdkOnDestroyAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnDestroyAb(message);
+            }
+
+            public override void SdkOnRestartAb(string message)
+            {
+                Debug.Log($"SdkOnRestartAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnRestartAb(message);
+            }
+
+            public override void SdkOnBackPressedAb(string message)
+            {
+                Debug.Log($"SdkOnBackPressedAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnBackPressedAb(message);
+            }
+
+            public override void SdkOnNewIntentAb(string message)
+            {
+                Debug.Log($"SdkOnNewIntentAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnNewIntentAb(message);
+            }
+
+            public override void SdkOnConfigurationChangedAb(string message)
+            {
+                Debug.Log($"SdkOnConfigurationChangedAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnConfigurationChangedAb(message);
+            }
+
+            public override void SdkOnSaveInstanceStateAb(string message)
+            {
+                Debug.Log($"SdkOnSaveInstanceStateAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnSaveInstanceStateAb(message);
+            }
+
+            public override void SdkOnActivityResultAb(string message)
+            {
+                Debug.Log($"SdkOnActivityResultAb:{message}");
+                QDDouYouManagerInit.Instance.douYouSDKListener.SdkOnActivityResultAb(message);
+            }
+
+            public override void SdkOnRequestPermissionResultAb(string message)
+            {
+                Debug.Log($"SdkOnRequestPermissionResultAb:{message}");
+            }
+
+            public override void SdkOnWindowFocusChangedAb(string message)
+            {
+                Debug.Log($"SdkOnWindowFocusChangedAb:{message}");
+            }
+
+            #endregion
+        }
+    }
+
+    /// <summary>
+    /// 场景(1 - 进入游戏、2 - 创建角色、3 - 角色升级、4 - 退出、5 - 充值)
+    /// </summary>
+    public enum DouYouRoleLogReportType
+    {
+        /// <summary>
+        /// 进入游戏
+        /// </summary>
+        EnterGame = 1,
+
+        /// <summary>
+        /// 创建角色
+        /// </summary>
+        CreateRole = 2,
+
+        /// <summary>
+        /// 角色升级
+        /// </summary>
+        LevelUp = 3,
+
+        /// <summary>
+        /// 退出
+        /// </summary>
+        ExitGame = 4,
+
+        /// <summary>
+        /// 充值
+        /// </summary>
+        Pay = 5
+    }
+}

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

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c49de97f35e74642aaad2761b96369e4
+timeCreated: 1716879846

+ 14 - 17
GameClient/Assets/Game/Launcher/Platform/QDManagerInit.cs

@@ -1,38 +1,39 @@
 using UnityEngine;
 using UniFramework.Event;
 
-
 namespace GFGGame.Launcher
 {
     public class QDManagerInit
     {
-
         public static void InitPlatform()
         {
             switch (LauncherConfig.ChannelId)
             {
+                case (int)ChannelID.DouYouTest:
+                    QDDouYouManagerInit.Instance.InitSDK(QDDouYouManagerInit.Instance.GetAdId());
+                    QDShareManagerInit.Instance.InitSDK();
+                    break;
                 default:
-                    UniEvent.SendMessage(new LauncherEvent.InitPlatformResult() { success = true});
+                    UniEvent.SendMessage(new LauncherEvent.InitPlatformResult() { success = true });
+                    QDShareManagerInit.Instance.InitSDK();
                     break;
             }
         }
 
         public static void UpdateApp()
         {
-            switch(LauncherConfig.ChannelId)
+            switch (LauncherConfig.ChannelId)
             {
                 default:
-                    if(!string.IsNullOrEmpty(LauncherConfig.updateUrl))
+                    if (!string.IsNullOrEmpty(LauncherConfig.updateUrl))
                     {
                         if (string.IsNullOrEmpty(LauncherConfig.updateAppPrompt))
                         {
                             LauncherConfig.updateAppPrompt = "需要安装新的安装包。";
                         }
+
                         Alert.Show(LauncherConfig.updateAppPrompt)
-                                .SetLeftButton(true, "前往更新", (data) =>
-                                {
-                                    Application.OpenURL(LauncherConfig.updateUrl);
-                                });
+                            .SetLeftButton(true, "前往更新", (data) => { Application.OpenURL(LauncherConfig.updateUrl); });
                     }
                     else
                     {
@@ -40,17 +41,13 @@ namespace GFGGame.Launcher
                         {
                             LauncherConfig.updateAppPrompt = "需要安装新的安装包,请联系研发获取。";
                         }
-                        Alert.Show(LauncherConfig.updateAppPrompt)
-                                .SetLeftButton(true, "知道了", (data) =>
-                                {
 
-                                    Application.Quit();
-                                });
+                        Alert.Show(LauncherConfig.updateAppPrompt)
+                            .SetLeftButton(true, "知道了", (data) => { Application.Quit(); });
                     }
+
                     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

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

@@ -0,0 +1,77 @@
+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.Find("GameLauncher");
+            mobsdk = mainCameraObject.GetComponent<MobSDK>();
+            shareSDK = mainCameraObject.GetComponent<ShareSDK>();
+        }
+
+        public class ShareSDKKHandler : AbShareSDKHandler
+        {
+            public override void OnAuthResult(int reqID, ResponseState state, PlatformType type, Hashtable result)
+            {
+                Debug.Log($"OnAuthResult xx");
+                QDShareManagerInit.Instance.shareSDKListener.OnAuthResult(reqID, state, type, result);
+            }
+
+            public override void OnGetUserInfoResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                Debug.Log($"OnGetUserInfoResult xx");
+                QDShareManagerInit.Instance.shareSDKListener.OnGetUserInfoResult(reqID, state, type, result);
+            }
+
+            public override void OnShareResult(int reqID, ResponseState state, PlatformType type, Hashtable result)
+            {
+                Debug.Log($"OnShareResult xx" + (int)type);
+                QDShareManagerInit.Instance.shareSDKListener.OnShareResult(reqID, state, type, result);
+            }
+
+            public override void OnGetFriendsResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                Debug.Log($"OnGetFriendsResult xx");
+                QDShareManagerInit.Instance.shareSDKListener.OnGetFriendsResult(reqID, state, type, result);
+            }
+
+            public override void OnFollowFriendResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                Debug.Log($"OnFollowFriendResult xx");
+                QDShareManagerInit.Instance.shareSDKListener.OnFollowFriendResult(reqID, state, type, result);
+            }
+
+            public override void OnIsClientValidForAndroidResult(int reqID, ResponseState state, PlatformType type,
+                Hashtable result)
+            {
+                Debug.Log($"OnIsClientValidForAndroidResult xx");
+                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

+ 1 - 1
GameClient/Assets/Game/Launcher/Version/VersionController.cs

@@ -67,7 +67,7 @@ namespace GFGGame
                 string defaultHostServer = GetHostServerURL(DefaultPackage);
                 string fallbackHostServer = defaultHostServer;
                 var createParameters = new HostPlayModeParameters();
-                //createParameters.DecryptionServices = new GameDecryptionServices();
+                createParameters.DecryptionServices = new GameDecryptionServices();
                 createParameters.QueryServices = new GameQueryServices();
                 createParameters.RemoteServices = new RemoteServices(defaultHostServer, fallbackHostServer);
                 initializationOperation = package.InitializeAsync(createParameters);

+ 1 - 1
GameClient/Assets/Plugins/Android/AndroidManifest.xml.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 65f88a7463737a843aa44b1fe710bad7
+guid: 6493bc54a46b5a240abe99fece86f948
 TextScriptImporter:
   externalObjects: {}
   userData: 

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


+ 1 - 1
GameClient/Assets/Plugins/com/easy/bugly/GamePlayerActivity.java.meta → GameClient/Assets/Plugins/Android/ShareSDKU3D.jar.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 504e29108f13a9a4795c61901d4fffc8
+guid: 1a995e0952a7d4839b616a51ec83deca
 PluginImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 0
GameClient/Assets/Plugins/Android/assets/hykb_anti.ini


+ 0 - 0
GameClient/Assets/Plugins/Android/assets/hykb_auxs.ini


+ 0 - 0
GameClient/Assets/Plugins/Android/assets/hykb_login.ini


+ 0 - 0
GameClient/Assets/Plugins/Android/assets/hykb_pay.ini


+ 8 - 0
GameClient/Assets/Plugins/Android/assets/quicksdk.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources>
+
+    <!-- 下面两行需要替换为游戏自己的参数 -->
+    <string name="product_code">00904283202399336477398219466207</string>
+    <string name="product_key">20872605</string>
+
+</resources>

+ 4 - 0
GameClient/Assets/Plugins/Android/assets/quicksdk.xml.meta

@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 597fe59ed9ec545499717bfb6a1c0d48
+DefaultImporter:
+  userData: 

+ 1 - 1
GameClient/Assets/Plugins/Android/assets/hykb_pay.ini.meta → GameClient/Assets/Plugins/Android/baseProjectTemplate.gradle.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 3175f16d15f2c5941b27fcc0ffa661f5
+guid: 66a4560ec1a0dd640b1cb6888270c552
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 1 - 1
GameClient/Assets/Plugins/Android/assets/hykb_auxs.ini.meta → GameClient/Assets/Plugins/Android/gradleTemplate.properties.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 687b83a3c0e9ba24fa90c8119e5346c7
+guid: d5ebef3a01aae6b4c993d9268b3c4dee
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 1 - 1
GameClient/Assets/Plugins/Android/assets/hykb_anti.ini.meta → GameClient/Assets/Plugins/Android/launcherTemplate.gradle.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 24105c86e7fb30e48a6750630feda58d
+guid: af6edf4205bbfba41bc886e3210599d6
 DefaultImporter:
   externalObjects: {}
   userData: 

BIN
GameClient/Assets/Plugins/Android/libs/douyou-release.aar


+ 32 - 0
GameClient/Assets/Plugins/Android/libs/douyou-release.aar.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 586f79cda14c10f46bfc629a29771d7d
+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: 

BIN
GameClient/Assets/Plugins/Android/libs/douyouTT-release.aar


+ 32 - 0
GameClient/Assets/Plugins/Android/libs/douyouTT-release.aar.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 3a452077ab5726045aefeac7735faeb6
+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: 

BIN
GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_foreground.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_foreground.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_round.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-hdpi/ic_launcher_round.png.meta

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

+ 1 - 1
GameClient/Assets/Plugins/Android/res/mipmap-ldpi.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 985ff2b4b7ab60e429f3b734fee189ec
+guid: 65502742369c29e4cb6218c2801348f3
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 1 - 1
GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher.png.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 95790db468915994cbd975e0aa8e2ed4
+guid: 0322f7bfbda90f945b063904d0970dcf
 DefaultImporter:
   externalObjects: {}
   userData: 

BIN
GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_foreground.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_foreground.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_round.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-ldpi/ic_launcher_round.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_foreground.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_foreground.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_round.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-mdpi/ic_launcher_round.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_foreground.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_foreground.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_round.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xhdpi/ic_launcher_round.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_foreground.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_foreground.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_round.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xxhdpi/ic_launcher_round.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_foreground.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_foreground.png.meta

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

BIN
GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_round.png


+ 0 - 7
GameClient/Assets/Plugins/Android/res/mipmap-xxxhdpi/ic_launcher_round.png.meta

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

+ 8 - 0
GameClient/Assets/Plugins/com/easy/bridge.meta

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

+ 249 - 0
GameClient/Assets/Plugins/com/easy/bridge/DouYouMainActivity.java

@@ -0,0 +1,249 @@
+package com.easy.bridge;
+
+import android.os.Bundle;
+
+import android.content.Intent;
+import android.content.res.Configuration;
+
+import com.sdk.douyou.DouYou;
+import com.sdk.douyou.listen.ActiveGameInterface;
+import com.sdk.douyou.listen.EnterGameInterface;
+import com.sdk.douyou.listen.SwitchAccountInterface;
+import com.sdk.douyou.adapter.DouYouSDKListenerAdapter;
+import com.sdk.douyou.listen.DouYouSDKListener;
+import com.sdk.douyou.bean.OrderInfoBean;
+import com.sdk.douyou.bean.RoleInfoBean;
+import com.sdk.douyou.util.LogUtil;
+import com.tencent.bugly.crashreport.CrashReport;
+import com.unity3d.player.UnityPlayer;
+import com.unity3d.player.UnityPlayerActivity;
+
+public class DouYouMainActivity extends UnityPlayerActivity
+{
+    private int uid;
+
+    private Bundle _savedInstanceState;
+
+    @Override protected void onCreate(Bundle savedInstanceState)
+    {
+        _savedInstanceState = savedInstanceState;
+        super.onCreate(savedInstanceState);
+
+        CrashReport.initCrashReport(getApplicationContext(), "766c5bdb0f", false);
+    }
+
+    //初始化douYou Sdk
+    public void initDouYou(String adId) {
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "ReceiveMessage", "SDK 实例化开始");
+        DouYou.getInstance().reportActive(this, adId);
+        DouYou.getInstance().setActivesuccessCallBack(new ActiveGameInterface() {
+            @Override
+            public void Activesuccess() {
+                UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "InitSuccess", "SDK 实例化成功");
+            }
+        });
+
+        DouYou.getInstance().init(this, adId, true, new EnterGameInterface() {
+            @Override
+            public void enter(int resUid, String token) {
+                uid = resUid;
+                // 登录成功后的处理逻辑,可以将 uid 和 token 发送给Unity
+                DouYou.getInstance().showFloatBall(DouYouMainActivity.this);
+                UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "LoginSuccess", resUid + "|gfg|" + token);
+            }
+        }, new SwitchAccountInterface() {
+            @Override
+            public void home() {
+                // 切换账号或退出登录后的处理逻辑,可以通知Unity返回游戏登录界面
+                UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "OutLoginSuccess",  "退出登录成功!");
+            }
+        });
+
+        DouYou.getInstance().onCreate(this, _savedInstanceState);
+
+        //监听支付回调
+        DouYou.getInstance().setSDKListener(new DouYouSDKListenerAdapter(){
+            @Override
+            public void onPayResult(int code, OrderInfoBean params) {
+                // params.getOrderID() 研发ID
+                // params.getXxx() 是DouYou的订单ID
+                switch (code) {
+                    case DouYouSDKListener.CODE_PAY_FAIL: //支付失败
+                        LogUtil.debug("pay fail : " + params.toString());
+                        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "PayFail", code + "|gfg|" + params.toString());
+                        break;
+                    case DouYouSDKListener.CODE_PAY_SUCCESS:  //支付成功
+                        LogUtil.debug("pay success : " + params.toString());
+                        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "PaySuccess", code + "|gfg|" + params.toString());
+                        break;
+                }
+            }
+        });
+    }
+
+    //显示登录界面
+    public void extShowLogin(){
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "ReceiveMessage", "显示登录界面");
+        DouYou.getInstance().showLogin(DouYouMainActivity.this);
+    }
+
+    //角色登录数据上报
+    public void extReportRoleLogin(String id, String level, String nickname, String sid, String serverName){
+        RoleInfoBean roleInfo = new RoleInfoBean();
+        roleInfo.setType(RoleInfoBean.TYPE_ENTER_GAME);
+        roleInfo.setSid(sid);
+        roleInfo.setServerName(serverName);
+        roleInfo.setId(id);
+        roleInfo.setNickname(nickname);
+        roleInfo.setLevel(level);
+       
+        DouYou.getInstance().reportRoleLogin(DouYouMainActivity.this, roleInfo);
+    }
+
+    //角色数据上报
+    public void extReportRole(int logType, String id, String level, String nickname, String sid, String serverName){
+        RoleInfoBean roleInfo = new RoleInfoBean();
+        roleInfo.setType(logType);
+        roleInfo.setSid(sid);
+        roleInfo.setServerName(serverName);
+        roleInfo.setId(id);
+        roleInfo.setNickname(nickname);
+        roleInfo.setLevel(level);
+
+        // 获取当前时间的毫秒级时间戳
+        long currentTimeMillis = System.currentTimeMillis();
+        // 将毫秒级时间戳转换为秒级时间戳
+        long currentTimeSeconds = currentTimeMillis / 1000;
+        if(logType == RoleInfoBean.TYPE_CREATE_ROLE){
+            roleInfo.setRoleCreateTime(currentTimeSeconds + "");
+        }
+        else if(logType == RoleInfoBean.TYPE_LEVEL_UP){
+            roleInfo.setRoleLevelUpTime(currentTimeSeconds + "");
+        }
+
+        DouYou.getInstance().reportRole(DouYouMainActivity.this, roleInfo);
+    }
+
+    //退出登录
+    public void extShowLogout(){
+        DouYou.getInstance().showLogout(DouYouMainActivity.this);
+    }
+
+    //退出app
+    public void extExitApp(){
+        DouYou.getInstance().exit();
+    }
+
+    //cp激励广告订单id  登录后用户uid  角色id
+    public void extOpenGroMoreAD(String cpAdOrderId, String roleId){
+        DouYou.getInstance().openGroMoreAD(cpAdOrderId, Integer.toString(uid), roleId);
+    }
+
+    //调起支付
+    public void extShowSwitchPayment(String orderId, String orderMoney, String productId, String productName, String productDesc, String roleServiceId, String serviceName, String roleId, String roleName, String roleLevel, String other){
+        OrderInfoBean orderInfoBean = new OrderInfoBean();
+        orderInfoBean.setOrderID(orderId);
+        orderInfoBean.setCpOrderMoney(orderMoney);
+        orderInfoBean.setProductId(productId);
+        orderInfoBean.setProductName(productName);
+        orderInfoBean.setProductDesc(productDesc);
+        orderInfoBean.setRoleServiceId(roleServiceId);
+        orderInfoBean.setRoleServiceName(serviceName);
+        orderInfoBean.setRoleId(roleId);
+        orderInfoBean.setRoleName(roleName);
+        orderInfoBean.setRoleLevel(roleLevel);
+        orderInfoBean.setOther(other);
+        
+        DouYou.getInstance().showSwitchPayment(DouYouMainActivity.this, orderInfoBean);
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        DouYou.getInstance().onStart(this);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnStart", "onStart finish");
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        DouYou.getInstance().onPause(this);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnPause", "onPause finish");
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        DouYou.getInstance().onResume(this);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnResume", "onResume finish");
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        DouYou.getInstance().onStop(this);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnStop", "onStop finish");
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        DouYou.getInstance().onDestroy(this);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnDestroy", "onDestroy finish");
+    }
+
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+        DouYou.getInstance().onRestart(this);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnRestart", "onRestart finish");
+    }
+
+    @Override
+    public void onBackPressed() {
+        DouYou.getInstance().onBackPressed();
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnBackPressed", "onBackPressed finish");
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        DouYou.getInstance().onNewIntent(intent);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnNewIntent", "onNewIntent finish");
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        DouYou.getInstance().onConfigurationChanged(newConfig);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnConfigurationChanged", "onConfigurationChanged finish");
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        DouYou.getInstance().onSaveInstanceState(outState);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnSaveInstanceState", "onSaveInstanceState finish");
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        DouYou.getInstance().onActivityResult(requestCode, resultCode, data);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnActivityResult", "onActivityResult finish");
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        DouYou.getInstance().onRequestPermissionResult(DouYouMainActivity.this,requestCode,permissions,grantResults);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnRequestPermissionResult", "onRequestPermissionsResult finish");
+    }
+
+    @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        super.onWindowFocusChanged(hasFocus);
+        DouYou.getInstance().onWindowFocusChanged(hasFocus);
+        UnityPlayer.UnitySendMessage("DouYouSDKGameObject", "SdkOnWindowFocusChanged", "onWindowFocusChanged finish");
+    }
+}

+ 32 - 0
GameClient/Assets/Plugins/com/easy/bridge/DouYouMainActivity.java.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: d9bab6b10a929ac46bfc239972f59adc
+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: 

+ 0 - 8
GameClient/Assets/Plugins/com/easy/bugly.meta

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

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

@@ -238,6 +238,8 @@ GameObject:
   m_Component:
   - component: {fileID: 1059812910}
   - component: {fileID: 1059812909}
+  - component: {fileID: 1059812912}
+  - component: {fileID: 1059812911}
   m_Layer: 0
   m_Name: GameLauncher
   m_TagString: Untagged
@@ -272,3 +274,291 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1059812911
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1059812908}
+  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 &1059812912
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1059812908}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5ddb254a1425545faa0fe46c651e248d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 8 - 0
GameClient/Assets/Resources/mipmap.meta

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

BIN
GameClient/Assets/Resources/mipmap/ic_launcher.png


+ 96 - 0
GameClient/Assets/Resources/mipmap/ic_launcher.png.meta

@@ -0,0 +1,96 @@
+fileFormatVersion: 2
+guid: e073f50f901dd264eadbc4a78dc9358d
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/Resources/mipmap/ic_launcher_round.png


+ 96 - 0
GameClient/Assets/Resources/mipmap/ic_launcher_round.png.meta

@@ -0,0 +1,96 @@
+fileFormatVersion: 2
+guid: fa73589ebaa840d42a977f7295e70623
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
GameClient/Assets/Resources/mipmap/layout.meta

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

+ 84 - 0
GameClient/Assets/Resources/mipmap/layout/activity_main.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".MainActivity">
+
+
+
+
+    <ScrollView
+        android:layout_weight="1"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_weight="1"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+
+            <Button
+                android:id="@+id/douyou_login"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="登录"/>
+
+            <Button
+                android:id="@+id/Pay"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="支付"/>
+
+            <Button
+                android:id="@+id/reportRoleLogin"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="角色登录信息上报"/>
+
+            <Button
+                android:id="@+id/reportRole"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="角色数据上报"/>
+
+            <Button
+                android:id="@+id/logout"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="退出登录"/>
+
+            <Button
+                android:id="@+id/exit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="退出app"/>
+
+
+
+            <Button
+                android:id="@+id/GroMoreAD"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="激励广告"/>
+
+            <Button
+                android:id="@+id/cash_out"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="红包提现"/>
+
+            <Button
+                android:visibility="gone"
+                android:id="@+id/showQuestionnaire"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="问卷"/>
+
+        </LinearLayout>
+
+    </ScrollView>
+</LinearLayout>

+ 7 - 0
GameClient/Assets/Resources/mipmap/layout/activity_main.xml.meta

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

+ 1 - 1
GameClient/Assets/Plugins/Android/res/mipmap-hdpi.meta → GameClient/Assets/Resources/mipmap/mipmap-hdpi.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 5e85337400682e24db69a2f514c78976
+guid: 93af50addb8cb7644bbe7e43733862fa
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

Някои файлове не бяха показани, защото твърде много файлове са промени