NativeAntiAddictionKitPlugin.mm 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. #import <AntiAddictionUI/AntiAddiction.h>
  2. #import <AntiAddictionService/AntiAddictionService-Swift.h>
  3. char const *GAME_OBJECT = "PluginBridge";
  4. char* MakeStringCopy(const char* string)
  5. {
  6. if (string == NULL)
  7. return NULL;
  8. char* res = (char*)malloc(strlen(string) + 1);
  9. strcpy(res, string);
  10. return res;
  11. }
  12. @interface Utility : NSObject
  13. @end
  14. @implementation Utility
  15. + (NSString *)dictonaryToJson:(NSDictionary *) dictionary {
  16. NSError* error;
  17. NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];
  18. if (!jsonData) {
  19. NSLog(@"Dictonary stringify error: %@", error);
  20. return @"";
  21. }
  22. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  23. }
  24. + (NSDictionary *)dictionaryWithJsonString:(NSString *) jsonString {
  25. if (jsonString == nil) return nil;
  26. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
  27. NSError *err;
  28. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
  29. options:NSJSONReadingMutableContainers
  30. error:&err];
  31. if (err) {
  32. NSLog(@"json解析失败:%@", err);
  33. return nil;
  34. }
  35. return dic;
  36. }
  37. @end
  38. @interface NativeAntiAddictionKitPlugin : NSObject<AntiAddictionDelegate>
  39. @end
  40. @implementation NativeAntiAddictionKitPlugin
  41. static NativeAntiAddictionKitPlugin *_sharedInstance;
  42. +(NativeAntiAddictionKitPlugin*)sharedInstance
  43. {
  44. static dispatch_once_t onceToken;
  45. dispatch_once(&onceToken, ^{
  46. _sharedInstance = [[NativeAntiAddictionKitPlugin alloc] init];
  47. });
  48. return _sharedInstance;
  49. }
  50. -(id)init
  51. {
  52. self = [super init];
  53. if (self)
  54. [self initHelper];
  55. return self;
  56. }
  57. -(void)initHelper
  58. {
  59. NSLog(@"Initialized NativeAntiAddictionKitPlugin class");
  60. }
  61. -(NSString *)generateUnityUnifyExtras:(NSDictionary *) extras {
  62. NSMutableDictionary* result = [[NSMutableDictionary alloc] init];
  63. if (extras) {
  64. if (extras[@"title"]) {
  65. [result setObject:extras[@"title"] forKey:@"title"];
  66. }
  67. if (extras[@"description"]) {
  68. [result setObject:extras[@"description"] forKey:@"description"];
  69. }
  70. if (extras[@"restrictType"]) {
  71. [result setObject:extras[@"userType"] forKey:@"userType"];
  72. }
  73. if (extras[@"remainTime"]) {
  74. [result setObject:[NSString stringWithFormat:@"%@",extras[@"remainTime"]] forKey:@"remaining_time_str"];
  75. }
  76. if (extras[@"restrictType"]) {
  77. [result setObject:[NSString stringWithFormat:@"%@",extras[@"restrictType"]] forKey:@"strict_type"];
  78. }
  79. }
  80. return [Utility dictonaryToJson:result];
  81. }
  82. -(NSString *)generateResultMessage:(NSInteger)code extras:(NSDictionary *) extras
  83. {
  84. NSDictionary* result = [[NSDictionary alloc] initWithObjectsAndKeys:
  85. [NSNumber numberWithUnsignedLong:code],@"code"
  86. ,[self generateUnityUnifyExtras:extras], @"extras"
  87. , nil];
  88. return [Utility dictonaryToJson:result];
  89. }
  90. -(NSString *)generateCheckPayResult:(NSInteger)status title:(NSString *)title description:(NSString *)description
  91. {
  92. NSDictionary* result = [[NSDictionary alloc] initWithObjectsAndKeys:
  93. [NSNumber numberWithUnsignedLong:status],@"status"
  94. ,[NSString stringWithFormat:@"%@",title],@"title"
  95. ,[NSString stringWithFormat:@"%@",description], @"description"
  96. ,nil];
  97. return [Utility dictonaryToJson:result];
  98. }
  99. #pragma mark - delegate
  100. - (void)antiAddictionCallbackWithCode:(AntiAddictionResultHandlerCode)code extra:(NSString *)extra {
  101. NSString *resultString = [NSString stringWithFormat:@"ios callback code:%ld,extra:%@",(long)code,extra];
  102. NSLog(@"%@", resultString);
  103. NSDictionary* extraDict = [Utility dictionaryWithJsonString:extra];
  104. if (code == AntiAddictionResultHandlerLoginSuccess) {
  105. UnitySendMessage(GAME_OBJECT, [@"HandleAntiAddictionCallbackMsg" UTF8String], [[self generateResultMessage:500 extras:extraDict] UTF8String]);
  106. } else {
  107. UnitySendMessage(GAME_OBJECT, [@"HandleAntiAddictionCallbackMsg" UTF8String]
  108. , [[self generateResultMessage:code extras:extraDict]
  109. UTF8String]);
  110. }
  111. }
  112. @end
  113. extern "C"
  114. {
  115. void initSDK(const char *gameIdentifier
  116. , bool useTimeLimit
  117. , bool usePaymentLimit
  118. , bool showSwitchAccount
  119. ) {
  120. NSString *gameIdentifierParam = [NSString stringWithUTF8String:gameIdentifier];
  121. NSLog(@"%@", [NSString stringWithFormat:@"initSDK with gameIdentifier: %@ ,useTimeLimit: %@, usePaymentLimit: %@"
  122. , gameIdentifierParam
  123. , useTimeLimit?@"YES":@"NO"
  124. , usePaymentLimit?@"YES":@"NO"]);
  125. AntiAddictionConfiguration *configuration = AntiAddictionService.configuration;
  126. configuration.showSwitchAccount = showSwitchAccount;
  127. [AntiAddiction initGameIdentifier:gameIdentifierParam antiAddictionConfig:configuration antiAddictionCallbackDelegate:[NativeAntiAddictionKitPlugin sharedInstance] completionHandler:^(BOOL) {}];
  128. }
  129. void startup(const char *userIdentifier, bool useTapLogin) {
  130. NSString *userIdentifierParam = [NSString stringWithUTF8String:userIdentifier];
  131. NSLog(@"%@", [NSString stringWithFormat:@"startup with userIdentifier: %@ ,useTapLogin: %@"
  132. , userIdentifierParam
  133. , useTapLogin?@"YES":@"NO"]);
  134. [AntiAddiction startUpUseTapLogin:useTapLogin userIdentifier:userIdentifierParam];
  135. }
  136. void logout() {
  137. [AntiAddiction logout];
  138. }
  139. void enterGame() {
  140. [AntiAddiction enterGame];
  141. }
  142. void leaveGame() {
  143. [AntiAddiction leaveGame];
  144. }
  145. void checkPayLimit(long amount) {
  146. [AntiAddiction checkPayLimit:(NSInteger)amount callBack:^(BOOL status, NSString * _Nonnull title, NSString * _Nonnull description) {
  147. UnitySendMessage(GAME_OBJECT, [@"HandleCheckPayLimit" UTF8String], [[Utility dictonaryToJson:[[NSDictionary alloc] initWithObjectsAndKeys:
  148. [NSNumber numberWithUnsignedLong:status],@"status"
  149. ,[NSString stringWithFormat:@"%@", title], @"title"
  150. ,[NSString stringWithFormat:@"%@", description], @"description"
  151. , nil]] UTF8String]);
  152. } failureHandler:^(NSString * _Nonnull exception) {
  153. UnitySendMessage(GAME_OBJECT, [@"HandleCheckPayLimitException" UTF8String], [exception UTF8String]);
  154. }];
  155. }
  156. void submitPayResult(long amount) {
  157. [AntiAddiction submitPayResult:(NSInteger)amount callBack:^(BOOL success) {
  158. UnitySendMessage(GAME_OBJECT, [@"HandleSubmitPayResult" UTF8String], "");
  159. } failureHandler:^(NSString * _Nonnull exception) {
  160. UnitySendMessage(GAME_OBJECT, [@"HandleSubmitPayResultException" UTF8String], [exception UTF8String]);
  161. }];
  162. }
  163. int getCurrentUserRemainTime() {
  164. return (int)[AntiAddiction getCurrentUserRemainTime];
  165. }
  166. int getCurrentUserAgeLimit() {
  167. return (int)[AntiAddiction getCurrentUserAgeLimite];
  168. }
  169. const char* getCurrentAntiToken() {
  170. return MakeStringCopy([[AntiAddiction currentToken] UTF8String]);
  171. }
  172. void setUnityVersion(const char * version) {
  173. [AntiAddiction setUnityVersion:[NSString stringWithUTF8String:version]];
  174. }
  175. bool standalone() {
  176. return [AntiAddiction isStandAlone];
  177. }
  178. }