LuLuConnector.mm 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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:@"03708293659873337398584284198829" 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. else
  153. {
  154. [self sendU3dMessage:@"onInitSuccess" parameters:@"Fail"];
  155. }
  156. _initSuccess = YES;
  157. }
  158. // 登录回调
  159. - (void)loginUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type {
  160. NSDictionary * resultDict = @{@"uid":uid, @"token":token, @"loginType":@(type).stringValue, @"isNewUser":@(REDeLoginKit.isNewUser).stringValue, @"isGuest":@(REDeLoginKit.isUserGuest).stringValue};
  161. [self sendU3dMessage:@"onLoginSuccess" parameters:[self dictionaryToJson:resultDict]];
  162. }
  163. //绑定回调
  164. - (void)bindUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type
  165. {
  166. NSDictionary * resultDict = @{@"uid":uid, @"token":token, @"loginType":@(type).stringValue};
  167. [self sendU3dMessage:@"onBindSuccess" parameters:[self dictionaryToJson:resultDict]];
  168. }
  169. //解绑回调
  170. - (void)unBindUid:(NSString *)uid userToken:(NSString *)token type:(USERCENTER_TYPE)type
  171. {
  172. NSDictionary * resultDict = @{@"uid":uid, @"token":token, @"loginType":@(type).stringValue};
  173. [self sendU3dMessage:@"onUnBindSuccess" parameters:[self dictionaryToJson:resultDict]];
  174. }
  175. /** 游戏调用logout操作完成回调 */
  176. - (void)gameLogoutSuccess {
  177. [self sendU3dMessage:@"onGameLogoutSuccess" parameters:@"game Logout"];
  178. }
  179. //在SDK的个人中心主动退出登录
  180. - (void)userLogout{
  181. NSLog(@"用户从个人中心手动登出。");
  182. [self sendU3dMessage:@"onLogoutSuccess" parameters:@"Log out"];
  183. }
  184. //支付结果的回调
  185. //购买完成 内购商品Id SDK订单号
  186. - (void)purchaseDoneProductId:(NSString *)productId orderNo:(NSString *)orderNo gameOrderNo:(NSString *)gameOrderNo appStoreReceiptBase64EncodedString:(NSString *)receiptString {
  187. NSMutableDictionary * resultDict = [NSMutableDictionary dictionary];
  188. [resultDict setObject:productId forKey:@"productId"];
  189. [resultDict setObject:orderNo forKey:@"orderNo"];
  190. [resultDict setObject:gameOrderNo forKey:@"gameOrderNo"];
  191. [resultDict setObject:receiptString forKey:@"receiptString"];
  192. [self sendU3dMessage:@"onPurchaseSuccess" parameters:[self dictionaryToJson:resultDict]];
  193. }
  194. //购买失败
  195. - (void)purchaseFail{
  196. [self sendU3dMessage:@"onPurchaseFail" parameters:@""];
  197. }
  198. //恢复非消耗商品成功,返回商品id信息
  199. - (void)restoreSuccess:(NSArray *)products
  200. {
  201. [self sendU3dMessage:@"onRestoreSuccess" parameters:[self jsonStrFromArr:products]];
  202. }
  203. //恢复失败
  204. - (void)restoreFail:(NSString *)msg
  205. {
  206. [self sendU3dMessage:@"onRestoreFail" parameters:msg];
  207. }
  208. //查找商品信息成功数组元素为REDeOrderInfo实例
  209. - (void)findProductInfoSuccess:(NSArray *)products {
  210. NSMutableArray * arr = [[NSMutableArray alloc]init];
  211. for (REDeOrderInfo * info in products) {
  212. // NSLog(@"查询商品信息成功结果:商品id=%@,商品名称=%@,商品描述=%@,商品价格=%@,商品总价=%@,透传参数=%@",info.productId, info.subject, info.desc, info.price, info.total, info.extras_params);
  213. [arr addObject:@{@"productId":info.productId, @"productName":info.subject, @"productDesc":info.desc, @"price":info.price, @"total":info.total, @"extras_params":info.extras_params}];
  214. }
  215. NSString *jsonStr = [self jsonStrFromArr:arr];
  216. [self sendU3dMessage:@"findProductInfoSuccess" parameters:[self jsonStrFromArr:arr]];
  217. }
  218. //查找商品信息失败
  219. - (void)findProductInfoFail:(NSString *)msg {
  220. [self sendU3dMessage:@"findProductInfoFail" parameters:msg];
  221. }
  222. - (void)setListener:(NSString *)gameObjectName
  223. {
  224. _gameObjectName = gameObjectName;
  225. _U3dInited = YES;
  226. if (_initSuccess)//初始化成功
  227. {
  228. [self sendU3dMessage:@"onInitSuccess" parameters:nil];
  229. _initSuccess = NO;
  230. }
  231. }
  232. - (void)sendU3dMessage:(NSString *)messageName parameters:(NSString *)parameters {
  233. if (!_gameObjectName) {
  234. NSLog(@"U3D not set listener");
  235. return;
  236. }
  237. if ([parameters isKindOfClass:NSString.class] && [parameters length]) {
  238. UnitySendMessage([_gameObjectName UTF8String], [messageName UTF8String], [parameters UTF8String]);
  239. }
  240. else{
  241. UnitySendMessage([_gameObjectName UTF8String], [messageName UTF8String], "");
  242. }
  243. }
  244. - (NSString *)jsonStrFromArr:(NSArray *)arr {
  245. NSError *error = nil;
  246. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:0 error:&error];
  247. if ([error code]) {
  248. return @"";
  249. }
  250. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  251. }
  252. - (NSArray *)arrFromJsonStr:(NSString *)string {
  253. NSError *error = nil;
  254. NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding];
  255. id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:nil];
  256. if ([jsonObject isKindOfClass:NSArray.class]) {
  257. return jsonObject;
  258. }
  259. return @[];
  260. }
  261. - (NSDictionary *)dictionaryFromJsonStr:(NSString *)string {
  262. NSError *error = nil;
  263. NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding];
  264. id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:nil];
  265. if ([jsonObject isKindOfClass:NSDictionary.class]) {
  266. return jsonObject;
  267. }
  268. return @{};
  269. }
  270. - (NSString*)dictionaryToJson:(NSDictionary *)dic
  271. {
  272. NSError *parseError = nil;
  273. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
  274. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  275. }
  276. @end