QsdkMgr.mm 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. #import <Foundation/Foundation.h>
  2. #import <SMSDK/SMSDK.h>
  3. static NSString* UnityListenerGoName;
  4. void SendMsgToUnity(NSString* messageName,NSString* parameters)
  5. {
  6. if (!UnityListenerGoName) {
  7. NSLog(@"U3D not set listener");
  8. return;
  9. }
  10. if ([parameters isKindOfClass:NSString.class] && [parameters length]) {
  11. UnitySendMessage([UnityListenerGoName UTF8String], [messageName UTF8String], [parameters UTF8String]);
  12. }
  13. else{
  14. UnitySendMessage([UnityListenerGoName UTF8String], [messageName UTF8String], "");
  15. }
  16. }
  17. NSString* QsdkCreateNSString (const char* string)
  18. {
  19. if (string)
  20. return [NSString stringWithUTF8String: string];
  21. else
  22. return [NSString stringWithUTF8String: ""];
  23. }
  24. //=============================回调函数=============================================
  25. //=============================回调函数=============================================
  26. //=============================回调函数=============================================
  27. //
  28. // void SDK_observer_CallBack(SPSDKNotification *notification)
  29. // {
  30. // switch (notification.type) {
  31. // case SPNotificationTypeInitSDK:
  32. // {
  33. // }
  34. // break;
  35. // case SPNotificationTypeLogout:
  36. // {
  37. // NSLog(@"退出登录成功");
  38. // SendMsgToUnity(@"onLogoutSuccess",@"");
  39. // }
  40. // break;
  41. // default:
  42. // break;
  43. // }
  44. // }
  45. void SDK_Init_Callback(NSNotification * notify)
  46. {
  47. if (notify.object == kSMSDKSuccessResult) {
  48. SendMsgToUnity(@"onInitSuccess",@"Init:Init Success");
  49. //初始化成功, 調用登錄方法
  50. } else if (notify.object == kSMSDKFailedResult) {
  51. //初始化失敗, 可以重新初始化
  52. SendMsgToUnity(@"onInitSuccess",@"Fail");
  53. }
  54. }
  55. void SDK_Logout_Callback(NSNotification * notify)
  56. {
  57. }
  58. void SDK_Login_Callback(NSNotification * notify)
  59. {
  60. //登錄成功,根據token使用服務端api獲取用戶唯一標識 guid (guid獲取方法請查看服務端文檔)
  61. if (notify.object == kSMSDKSuccessResult) {
  62. //登錄成功
  63. NSString *tokenKey = notify.userInfo[kSMSDKLoginTokenKey];
  64. int code = 0;
  65. SendMsgToUnity(@"onLoginSuccess",[NSString stringWithFormat:@"%d[]%@[]%@[]%@[]%@",code,@"success", tokenKey, @"-1", @"-1"]);
  66. } else {
  67. //登錄失敗或者其他情況
  68. SendMsgToUnity(@"onLoginFail",@"登录失败");
  69. }
  70. }
  71. void SDK_Pay_Callback(NSNotification * notify)
  72. {
  73. //支付結果
  74. if (notify.object == kSMSDKSuccessResult) {
  75. //支付成功, 刷新用戶數據
  76. SendMsgToUnity(@"onPaySuccess",@"支付Suc");
  77. } else if (notify.object == kSMSDKUserCancelResult) {
  78. //支付取消, 刷新用戶數據数,保障不漏單
  79. SendMsgToUnity(@"onPayFail",@"");
  80. } else if (notify.object == kSMSDKFailedResult) {
  81. //支付錯誤, 刷新用戶數據,保障不漏單
  82. NSString *errMsg = notify.userInfo[kSMSDKErrorShowKey];
  83. SendMsgToUnity(@"onPayFail",errMsg);
  84. }
  85. }
  86. void SDK_ChangeAppkey_Callback(NSNotification * notify)
  87. {
  88. }
  89. void SDK_UpdateRoleInfo_Callback(BOOL success, id data)
  90. {
  91. }
  92. //=============================回调函数=============================================
  93. //=============================回调函数=============================================
  94. extern "C"
  95. {
  96. void QSDK_SetListener(const char *gameObjectName){
  97. UnityListenerGoName = QsdkCreateNSString(gameObjectName);
  98. }
  99. void QSDK_Init() {
  100. //SendMsgToUnity(@"onInitSuccess",@"Init:Init Success");
  101. //SendMsgToUnity(@"onInitSuccess",@"Fail");
  102. //SDK初始化 code: 0:成功, 1:失败
  103. NSString *gameId = @"127";
  104. NSDictionary<NSString *, id> *infoDictionary = [NSBundle mainBundle].infoDictionary;
  105. id value = [infoDictionary objectForKey:@"X7SDK_GameKey"];
  106. if (value != NULL && [value isKindOfClass:[NSString class]]) {
  107. gameId = (NSString *)value;
  108. }
  109. [[NSNotificationCenter defaultCenter] removeObserver:self name:SMSDKInitDidFinishNotification object:nil];
  110. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(SDK_Init_Callback:) name:SMSDKInitDidFinishNotification object:nil];
  111. [[NSNotificationCenter defaultCenter] removeObserver:self name:SMSDKLoginNotification object:nil];
  112. SEL extractedExpr = @selector(SDK_Login_Callback:);
  113. [[NSNotificationCenter defaultCenter] addObserver:self selector:extractedExpr name:SMSDKLoginNotification object:nil];
  114. [[NSNotificationCenter defaultCenter] removeObserver:self name:SMSDKLogoutNotification object:nil];
  115. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(SDK_Logout_Callback:) name:SMSDKLogoutNotification object:nil];
  116. [[NSNotificationCenter defaultCenter] removeObserver:self name:SMSDKPayResultNotification object:nil];
  117. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(SDK_Pay_Callback:) name:SMSDKPayResultNotification object:nil];
  118. [[NSNotificationCenter defaultCenter] removeObserver:self name:kSMSDKChangeAppkeyNotification object:nil];
  119. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(SDK_ChangeAppkey_Callback:) name:kSMSDKChangeAppkeyNotification object:nil];
  120. //使用appKey初始化SDK
  121. [SMSDK smInitWithAppKey:gameId];
  122. }
  123. void QSDK_login()
  124. {
  125. //使用SDK登录界面登录
  126. [SMSDK smLogin];
  127. }
  128. void QSDK_Pay(const char *productId,const char *productName,const char * amount,const char *orderNo,
  129. const char *callBackUrl,const char *extrasParams,
  130. const char * gameName,const char * serverName,
  131. const char* productDesc,
  132. const char* serverID,const char* accountID,const char* roleID,const char* roleLv) {
  133. }
  134. void QSDK_Pay_x7(const char * extends_info_data,
  135. const char * game_area,
  136. const char * game_level,
  137. const char * game_orderid,
  138. const char * game_currency,
  139. const char * game_price,
  140. const char * game_role_id,
  141. const char * game_role_name,
  142. const char * game_guid,
  143. const char * notify_id,
  144. const char * subject,
  145. const char * game_sign,
  146. const char * game_access_version) {
  147. SMPayInfo * payInfo = [[SMPayInfo alloc] init];
  148. payInfo.game_orderid = QsdkCreateNSString(game_orderid);
  149. payInfo.game_level = QsdkCreateNSString(game_level);
  150. payInfo.game_area = QsdkCreateNSString(game_area);
  151. payInfo.game_price = QsdkCreateNSString(game_price);
  152. payInfo.game_role_id = QsdkCreateNSString(game_role_id);
  153. payInfo.game_role_name = QsdkCreateNSString(game_role_name);
  154. payInfo.subject = QsdkCreateNSString(subject);
  155. payInfo.notify_id = QsdkCreateNSString(notify_id);
  156. payInfo.game_sign = QsdkCreateNSString(game_sign);
  157. payInfo.extends_info_data = QsdkCreateNSString(extends_info_data);
  158. payInfo.game_access_version = QsdkCreateNSString(game_access_version);
  159. payInfo.game_guid = QsdkCreateNSString(game_guid);
  160. //遊戲方不可用此方法產生game_sign字段,這個方法只是让Demo的支付接口可以跑通的臨時方法
  161. //遊戲裡面game_sign參數是根據兩邊服務器約定的規則產生的,由遊戲的服務器返回給客戶端,詳見服務器的對接文檔
  162. payInfo.game_currency = QsdkCreateNSString(game_currency);
  163. //對參數做判空操作,如果有參數為空請不要傳進sdk中!!!
  164. //QsdkCreateNSString(extrasParams)
  165. [SMSDK smPayWithNewPayInfo:payInfo];
  166. }
  167. void QSDK_logout() {
  168. //退出登录
  169. NSLog(@"U3D call SDK logout");
  170. [SMSDK smLogout];
  171. [SMSDK smAfterLogoutRole];
  172. }
  173. extern NSDictionary* GetParameters(NSArray* arr);
  174. void QSDK_UpdateRoleInfo_X7(int type, string game_guid,
  175. const char * game_area,
  176. const char * game_area_id ,
  177. const char * game_role_id ,
  178. const char * game_role_name ,
  179. const char * roleLevel ,
  180. const char * roleCE,
  181. const char * roleStage,
  182. const char * roleRechargeAmount ,
  183. const char * roleGuild ,
  184. const char * roleGuildId,const char * extra)
  185. {
  186. if(type == 4)
  187. {
  188. return;
  189. }
  190. SMGameRoleInfo *gameRoleInfo = [[SMGameRoleInfo alloc] init];
  191. gameRoleInfo.game_guid =QsdkCreateNSString(game_guid);
  192. gameRoleInfo.game_area =QsdkCreateNSString(game_area);
  193. gameRoleInfo.game_area_id = QsdkCreateNSString(game_area_id);
  194. gameRoleInfo.game_role_id = QsdkCreateNSString(game_role_id);
  195. gameRoleInfo.game_role_name = QsdkCreateNSString(game_role_name);
  196. gameRoleInfo.roleLevel = QsdkCreateNSString(roleLevel);
  197. gameRoleInfo.roleCE = QsdkCreateNSString(roleCE);
  198. gameRoleInfo.roleStage = QsdkCreateNSString(roleStage);
  199. gameRoleInfo.roleRechargeAmount = QsdkCreateNSString(roleRechargeAmount);
  200. gameRoleInfo.roleGuild = QsdkCreateNSString(roleGuild);
  201. gameRoleInfo.roleGuildId = QsdkCreateNSString(roleGuildId);
  202. [SMSDK smAfterChooseRoleSendInfo:gameRoleInfo];
  203. }
  204. }
  205. NSDictionary* GetParameters(NSArray* arr)
  206. {
  207. int count = ((int)arr.count/2) - 2;
  208. int start = 4;
  209. if(count ==1){return @{arr[start]:arr[start+1],};}
  210. else if(count ==2){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],}; }
  211. else if(count ==3){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],};}
  212. else if(count ==4){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],};}
  213. else if(count ==5){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],arr[start+8]:arr[start+9],};}
  214. else if(count ==6){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],arr[start+8]:arr[start+9],arr[start+10]:arr[start+11],};}
  215. else if(count ==7){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],arr[start+8]:arr[start+9],arr[start+10]:arr[start+11],arr[start+12]:arr[start+13],};}
  216. else if(count ==8){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],arr[start+8]:arr[start+9],arr[start+10]:arr[start+11],arr[start+12]:arr[start+13],arr[start+14]:arr[start+15],};}
  217. else if(count ==9){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],arr[start+8]:arr[start+9],arr[start+10]:arr[start+11],arr[start+12]:arr[start+13],arr[start+14]:arr[start+15],arr[start+16]:arr[start+17],};}
  218. else if(count >=10){return @{arr[start]:arr[start+1],arr[start+2]:arr[start+3],arr[start+4]:arr[start+5],arr[start+6]:arr[start+7],arr[start+8]:arr[start+9],arr[start+10]:arr[start+11],arr[start+12]:arr[start+13],arr[start+14]:arr[start+15],arr[start+16]:arr[start+17],arr[start+18]:arr[start+19],};}
  219. return [NSDictionary dictionary];
  220. }