LuLuConnector.mm 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. //
  2. #import "LuLuConnector.h"
  3. #if defined(__cplusplus)
  4. extern "C" {
  5. #endif
  6. extern NSString* LoginKitCreateNSString (const char* string);
  7. extern char* LoginKitMakeStringCopy(const char*string);
  8. extern void UnitySendMessage(const char *, const char *, const char *);
  9. #pragma mark - SDK 平台接口调用
  10. void LuluSetListener(const char *gameObjectName){
  11. [[LuLuConnector shareInstance] setListener:LoginKitCreateNSString(gameObjectName)];
  12. }
  13. void luLuInit(){
  14. //设置回调
  15. [REDeLoginKit setFunctionLoginCallback:[LuLuConnector shareInstance]];
  16. [REDeLoginKit setFunctionBuyCallback:[LuLuConnector shareInstance]];
  17. [REDeLoginKit restoreNonConsumptionProducts:[LuLuConnector shareInstance]];
  18. // 初始化
  19. [REDeLoginKit initSDKWithProductCode:@"xxxxxxxxxxxx" callback:[LuLuConnector shareInstance]]; /** productCode到sdk后台获取, 请务必修改为自己的参数 */
  20. }
  21. /** 显示登陆界面 */
  22. void luLuLogin(BOOL isShowMenu){
  23. [REDeLoginKit loginWithMenuShow:isShowMenu];
  24. }
  25. /** 固定调起某个三方登录 */
  26. void loginKitLoginWithType(int type){
  27. [REDeLoginKit loginAccountType:(USERCENTER_TYPE)type];
  28. }
  29. /** 静默登录不显示登陆界面 */
  30. void luLuFastStartGame(){
  31. [REDeLoginKit fastlyStartGame];
  32. }
  33. /** 获取userid */
  34. const char * LuluGetUserId(){
  35. NSString * userId = [REDeLoginKit userID];
  36. return LoginKitMakeStringCopy([userId UTF8String]);
  37. }
  38. /** 获取SDK设备ID */
  39. const char * LuluGetDeviceId(){
  40. NSString * deviceId = [REDeLoginKit getDeviceID];
  41. return LoginKitMakeStringCopy([deviceId UTF8String]);
  42. }
  43. /** 注销登陆 */
  44. void luLuLogout(){
  45. [REDeLoginKit logout];
  46. }
  47. /** 显示个人中心 */
  48. void luLuUserCenter(){
  49. [REDeLoginKit enterUserCenter];
  50. }
  51. /** 获取三方绑定信息 */
  52. const char * luLuGetUserBindInfo(){
  53. NSDictionary * resultDict = [REDeLoginKit getUserBindInfo];
  54. NSString *jsonStr = [[LuLuConnector shareInstance] dictionaryToJson:resultDict];
  55. return LoginKitMakeStringCopy([jsonStr UTF8String]);
  56. }
  57. /** 进入三方绑定界面 */
  58. void luLuBindAccount(){
  59. [REDeLoginKit bandAccount];
  60. }
  61. /** 绑定三方账号 */
  62. void luLuBindAccountWithType(int type){
  63. [REDeLoginKit bindAccountType:(USERCENTER_TYPE)type];
  64. }
  65. /** 解绑三方账号 */
  66. void luLuUnbindAccountWithType(int type){
  67. [REDeLoginKit unbindAccount:(USERCENTER_TYPE)type];
  68. }
  69. /** 删除当前登录账号,游客登录没有此功能 */
  70. void luLuAccountDeletion(){
  71. [REDeLoginKit accountDeletion];
  72. }
  73. /** 显示悬浮窗 */
  74. void luLuShowMenu(float y){
  75. [REDeLoginKit showFloatButtonIsLeft:YES buttonOriginalY:y > 0 ? y:40];
  76. }
  77. /** 隐藏悬浮窗 */
  78. void luLuDismissMenu(){
  79. [REDeLoginKit dismissMenu];
  80. }
  81. /** 上报角色信息 */
  82. void luluSetRoleInfo(const char *serverName,const char *serverId,const char *roleId,const char *roleName,const char *roleLevel,const char *roleVipLevel){
  83. REDeRoleInfo * role = [[REDeRoleInfo alloc]init];
  84. role.server_name = LoginKitCreateNSString(serverName);
  85. role.server_id = LoginKitCreateNSString(serverId);
  86. role.game_role_name = LoginKitCreateNSString(roleName);
  87. role.game_role_id = LoginKitCreateNSString(roleId);
  88. role.game_role_level = LoginKitCreateNSString(roleLevel);
  89. role.vip_level = LoginKitCreateNSString(roleVipLevel);
  90. [REDeLoginKit setGameRoleInfo:role];
  91. }
  92. /** 调用下单方法 */
  93. void luLuCongzi(const char *productId,const char *productName,char * amount,const char *orderNo,const char *callBackUrl,const char *extrasParams){
  94. REDeOrderInfo *param = [[REDeOrderInfo alloc] init];
  95. param.productId = LoginKitCreateNSString(productId); ///设置商品ID,苹果后台对应的productID
  96. param.subject = LoginKitCreateNSString(productName); ///商品名称 必填
  97. param.total = LoginKitCreateNSString(amount); ///商品总价 必填
  98. param.product_order_no = LoginKitCreateNSString(orderNo); ///游戏方订单号 string[64] 接入QuickAd时必填、必须唯一
  99. param.callback_url = LoginKitCreateNSString(callBackUrl); ///回调通知地址 string[200] 可选 客户端配置优先; 可传nil
  100. param.extras_params = LoginKitCreateNSString(extrasParams); ///透传参数 可选
  101. [REDeLoginKit IAPWithParameter:param];
  102. }
  103. /** 恢复历史内购 */
  104. void luluRestoreNonConsumptionProducts(){
  105. [REDeLoginKit restoreNonConsumptionProducts:[LuLuConnector shareInstance]];
  106. }
  107. /** 通过商品ids数组查找商品信息 */
  108. void luluFindProductInfo(const char *productIds){
  109. NSString * productIdStr = LoginKitCreateNSString(productIds);
  110. NSArray * productIdArr = [[LuLuConnector shareInstance] arrFromJsonStr:productIdStr];
  111. if (productIdArr.count) {
  112. [REDeLoginKit findProductInfoWithProductIds:productIdArr delegate:(id)[LuLuConnector shareInstance]];
  113. } else {
  114. [[LuLuConnector shareInstance] sendU3dMessage:@"findProductInfoFail" parameters:@"productids is not json string"];
  115. }
  116. }
  117. NSString* LoginKitCreateNSString (const char* string)
  118. {
  119. if (string)
  120. return [NSString stringWithUTF8String: string];
  121. else
  122. return [NSString stringWithUTF8String: ""];
  123. }
  124. char* LoginKitMakeStringCopy(const char*string) {
  125. if (string == NULL) {
  126. return NULL;
  127. }
  128. char*res = (char*)malloc(strlen(string)+1);
  129. strcpy(res, string);
  130. return res;
  131. }
  132. #if defined(__cplusplus)
  133. }
  134. #endif
  135. @implementation LuLuConnector
  136. +(LuLuConnector *)shareInstance{
  137. static LuLuConnector *shareInstance = nil;
  138. static dispatch_once_t predicate;
  139. dispatch_once(&predicate, ^{
  140. shareInstance = [[LuLuConnector alloc] init];
  141. });
  142. return shareInstance;
  143. }
  144. //MARK: - 回调
  145. // 初始化结果回调
  146. - (void)qgSDKInitDone {
  147. // 初始化成功
  148. if (_U3dInited) {
  149. [self sendU3dMessage:@"onInitSuccess" parameters:@"Init:Init Success"];
  150. return;
  151. }
  152. _initSuccess = YES;
  153. }
  154. // 登录回调
  155. - (void)loginUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type {
  156. NSDictionary * resultDict = @{@"uid":uid, @"token":token, @"loginType":@(type).stringValue, @"isNewUser":@(REDeLoginKit.isNewUser).stringValue, @"isGuest":@(REDeLoginKit.isUserGuest).stringValue};
  157. [self sendU3dMessage:@"onLoginSuccess" parameters:[self dictionaryToJson:resultDict]];
  158. }
  159. //绑定回调
  160. - (void)bindUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type
  161. {
  162. NSDictionary * resultDict = @{@"uid":uid, @"token":token, @"loginType":@(type).stringValue};
  163. [self sendU3dMessage:@"onBindSuccess" parameters:[self dictionaryToJson:resultDict]];
  164. }
  165. //解绑回调
  166. - (void)unBindUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type
  167. {
  168. NSDictionary * resultDict = @{@"uid":uid, @"token":token, @"loginType":@(type).stringValue};
  169. [self sendU3dMessage:@"onUnBindSuccess" parameters:[self dictionaryToJson:resultDict]];
  170. }
  171. /** 游戏调用logout操作完成回调 */
  172. - (void)gameLogoutSuccess {
  173. [self sendU3dMessage:@"onGameLogoutSuccess" parameters:@"game Logout"];
  174. }
  175. //在SDK的个人中心主动退出登录
  176. - (void)userLogout{
  177. NSLog(@"用户从个人中心手动登出。");
  178. [self sendU3dMessage:@"onLogoutSuccess" parameters:@"Log out"];
  179. }
  180. //支付结果的回调
  181. //购买完成 内购商品Id SDK订单号
  182. - (void)purchaseDoneProductId:(NSString *)productId orderNo:(NSString *)orderNo gameOrderNo:(NSString *)gameOrderNo appStoreReceiptBase64EncodedString:(NSString *)receiptString {
  183. NSMutableDictionary * resultDict = [NSMutableDictionary dictionary];
  184. [resultDict setObject:productId forKey:@"productId"];
  185. [resultDict setObject:orderNo forKey:@"orderNo"];
  186. [resultDict setObject:gameOrderNo forKey:@"gameOrderNo"];
  187. [resultDict setObject:receiptString forKey:@"receiptString"];
  188. [self sendU3dMessage:@"onPurchaseSuccess" parameters:[self dictionaryToJson:resultDict]];
  189. }
  190. //购买失败
  191. - (void)purchaseFail{
  192. [self sendU3dMessage:@"onPurchaseFail" parameters:@""];
  193. }
  194. //恢复非消耗商品成功,返回商品id信息
  195. - (void)restoreSuccess:(NSArray *)products
  196. {
  197. [self sendU3dMessage:@"onRestoreSuccess" parameters:[self jsonStrFromArr:products]];
  198. }
  199. //恢复失败
  200. - (void)restoreFail:(NSString *)msg
  201. {
  202. [self sendU3dMessage:@"onRestoreFail" parameters:msg];
  203. }
  204. //查找商品信息成功数组元素为REDeOrderInfo实例
  205. - (void)findProductInfoSuccess:(NSArray *)products {
  206. NSMutableArray * arr = [[NSMutableArray alloc]init];
  207. for (REDeOrderInfo * info in products) {
  208. // NSLog(@"查询商品信息成功结果:商品id=%@,商品名称=%@,商品描述=%@,商品价格=%@,商品总价=%@,透传参数=%@",info.productId, info.subject, info.desc, info.price, info.total, info.extras_params);
  209. [arr addObject:@{@"productId":info.productId, @"productName":info.subject, @"productDesc":info.desc, @"price":info.price, @"total":info.total, @"extras_params":info.extras_params}];
  210. }
  211. NSString *jsonStr = [self jsonStrFromArr:arr];
  212. [self sendU3dMessage:@"findProductInfoSuccess" parameters:[self jsonStrFromArr:arr]];
  213. }
  214. //查找商品信息失败
  215. - (void)findProductInfoFail:(NSString *)msg {
  216. [self sendU3dMessage:@"findProductInfoFail" parameters:msg];
  217. }
  218. - (void)setListener:(NSString *)gameObjectName
  219. {
  220. _gameObjectName = gameObjectName;
  221. _U3dInited = YES;
  222. if (_initSuccess)//初始化成功
  223. {
  224. [self sendU3dMessage:@"onInitSuccess" parameters:nil];
  225. _initSuccess = NO;
  226. }
  227. }
  228. - (void)sendU3dMessage:(NSString *)messageName parameters:(NSString *)parameters {
  229. if (!_gameObjectName) {
  230. NSLog(@"U3D not set listener");
  231. return;
  232. }
  233. if ([parameters isKindOfClass:NSString.class] && [parameters length]) {
  234. UnitySendMessage([_gameObjectName UTF8String], [messageName UTF8String], [parameters UTF8String]);
  235. }
  236. else{
  237. UnitySendMessage([_gameObjectName UTF8String], [messageName UTF8String], "");
  238. }
  239. }
  240. - (NSString *)jsonStrFromArr:(NSArray *)arr {
  241. NSError *error = nil;
  242. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:0 error:&error];
  243. if ([error code]) {
  244. return @"";
  245. }
  246. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  247. }
  248. - (NSArray *)arrFromJsonStr:(NSString *)string {
  249. NSError *error = nil;
  250. NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding];
  251. id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:nil];
  252. if ([jsonObject isKindOfClass:NSArray.class]) {
  253. return jsonObject;
  254. }
  255. return @[];
  256. }
  257. - (NSDictionary *)dictionaryFromJsonStr:(NSString *)string {
  258. NSError *error = nil;
  259. NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding];
  260. id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:nil];
  261. if ([jsonObject isKindOfClass:NSDictionary.class]) {
  262. return jsonObject;
  263. }
  264. return @{};
  265. }
  266. - (NSString*)dictionaryToJson:(NSDictionary *)dic
  267. {
  268. NSError *parseError = nil;
  269. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
  270. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  271. }
  272. @end