AdmobSdkUnityAdapter.mm 68 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811
  1. //
  2. // UnityAdapter.m
  3. // Unity-iPhone
  4. //
  5. // Created by 蒋龙 on 2019/8/27.
  6. //
  7. /*
  8. 在Unity中需要调用的类中定义以下方法以便调用
  9. //广告相关函数
  10. [DllImport("__Internal")]
  11. private static extern void InitUnityAdSdk(string adUnitsJson, string appAppleId, string umengId);
  12. */
  13. #import <UIKit/UIKit.h>
  14. #import <AdAdmobSDK/AdAdmobSDK.h>
  15. #ifdef PLATFORM_IOS
  16. #import "Unity/UnityInterface.h"
  17. #endif
  18. #import <Foundation/Foundation.h>
  19. #define appDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])
  20. #define BundleId [NSBundle mainBundle].bundleIdentifier
  21. #define kTabBarHeight 50
  22. #define kDeviceWidth [UIScreen mainScreen].bounds.size.width
  23. #define KDeviceHeight [UIScreen mainScreen].bounds.size.height
  24. #define isIOS7 ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending )
  25. #define isPad (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)
  26. #define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
  27. //判断iPHoneXr
  28. #define IS_IPHONE_Xr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
  29. //判断iPhoneXs
  30. #define IS_IPHONE_Xs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
  31. //判断iPhoneXs Max
  32. #define IS_IPHONE_Xs_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
  33. // 是iPhone X 以上的机型
  34. #define IS_IPHONE_X_UP ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? YES : NO)
  35. #define jl_weakify(var) __weak typeof(var) weakSelf = var
  36. #define jl_strongify(var) __strong typeof(var) strongSelf = var
  37. //iPhoneX系列
  38. #define Height_StatusBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 44.0 : 20.0)
  39. #define Height_NavBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 88.0 : 64.0)
  40. #define Height_TabBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 83.0 : 49.0)
  41. //固定代码
  42. #if defined(__cplusplus)
  43. extern "C"{
  44. #endif
  45. // life cycle management
  46. void UnityPause(int pause);
  47. void UnitySendMessage(const char* obj, const char* method, const char* msg);
  48. #if defined(__cplusplus)
  49. }
  50. #endif
  51. #define kUnityObjectName "PottingMobile"
  52. #define kUnityObjectServicesName "PottingMobileServices"
  53. @interface AdmobSdkUnityAdapter : NSObject <AdManagerDelegate, ApplePayDelegate, LoginManagerDelegate, UnitlsManagerDelegate, YLApisManagerDelegate, GameCenterManagerDelegate, ToolsManagerDelegate>
  54. @end
  55. @implementation AdmobSdkUnityAdapter
  56. #pragma mark - 广告相关函数
  57. - (UIViewController *)getRootViewController{
  58. UIWindow* window = nil;
  59. if (@available(iOS 13.0, *))
  60. {
  61. for (UIWindowScene* windowScene in [UIApplication sharedApplication].connectedScenes)
  62. {
  63. if (windowScene.activationState == UISceneActivationStateForegroundActive)
  64. {
  65. window = windowScene.windows.firstObject;
  66. break;
  67. }
  68. }
  69. }else{
  70. window = [UIApplication sharedApplication].keyWindow;
  71. }
  72. NSAssert(window, @"The window is empty");
  73. return window.rootViewController;
  74. }
  75. -(void)isDebug:(BOOL)isdebug {
  76. [AdManager sharedManager].isDebug = isdebug;
  77. }
  78. ///开启定时自动加载广告
  79. -(void)openAutoLoadAd{
  80. [[AdManager sharedManager] openAutoLoadAd];
  81. }
  82. // SDK中初始化方法
  83. -(void)initUnityAdSdkWithAdUnitsJson:(const char *)adUnitsJson appAppleId:(const char *)appAppleId umengId:(const char *)umengId appsFlyerKey:(const char *)appsFlyerKey channel:(const char *)channel pangleAppID:(const char *)pangleAppID {
  84. NSString *adUnitsJsonStr = [self cStrToNSString:adUnitsJson];
  85. NSString *appAppleIdStr = [self cStrToNSString:appAppleId];
  86. NSString *umengIdStr = [self cStrToNSString:umengId];
  87. NSString *appsFlyerKeyStr = [self cStrToNSString:appsFlyerKey];
  88. NSString *channelStr = [self cStrToNSString:channel];
  89. NSString *pangleAppIDStr = [self cStrToNSString:pangleAppID];
  90. // NSLog(@"umengID:%@", umengIdStr);
  91. // NSLog(@"appsFlyerKey:%@", appsFlyerKeyStr);
  92. [AdManager sharedManager].delegate = self;
  93. [[AdManager sharedManager] initAdWithAdUnitsJson:adUnitsJsonStr appAppleId:appAppleIdStr umengId:umengIdStr appsFlyerKey:appsFlyerKeyStr channel:channelStr pangleAppID:pangleAppIDStr];
  94. }
  95. -(void)setRepeatTimeWithTime:(int)time {
  96. [AdManager sharedManager].repeatTime = @(time).integerValue;
  97. }
  98. -(void)loadAndShowBannerAdWithAdPostion:(const char *)adPostion bannerHeight:(int)bannerH {
  99. // TopLeft,TopCenter,TopRight,Centered,BottomLeft,BottomCenter,BottomRight
  100. if (adPostion != nil) {
  101. float adW = 320;
  102. float adH = 50;
  103. if (bannerH == 50 || bannerH == 90 || bannerH == 250 || bannerH == 280) {
  104. adH = bannerH;
  105. }
  106. NSString *adPostionStr = [self cStrToNSString:adPostion];
  107. CGRect frame = CGRectZero;
  108. if ([adPostionStr isEqualToString:@"TopLeft"]) {
  109. frame = CGRectMake(0, Height_StatusBar, adW, adH);
  110. }
  111. if ([adPostionStr isEqualToString:@"TopCenter"]) {
  112. frame = CGRectMake((kDeviceWidth-adW) / 2.0, Height_StatusBar, adW, adH);
  113. }
  114. if ([adPostionStr isEqualToString:@"TopRight"]) {
  115. frame = CGRectMake(kDeviceWidth-adW, Height_StatusBar, adW, adH);
  116. }
  117. if ([adPostionStr isEqualToString:@"Centered"]) {
  118. frame = CGRectMake((kDeviceWidth-adW) / 2.0, (KDeviceHeight/2.0 - adH/2.0), adW, adH);
  119. }
  120. if ([adPostionStr isEqualToString:@"BottomLeft"]) {
  121. frame = CGRectMake(0, KDeviceHeight - adH, adW, adH);
  122. }
  123. if ([adPostionStr isEqualToString:@"BottomCenter"]) {
  124. frame = CGRectMake((kDeviceWidth-adW) / 2.0, KDeviceHeight - adH, adW, adH);
  125. }
  126. if ([adPostionStr isEqualToString:@"BottomRight"]) {
  127. frame = CGRectMake(kDeviceWidth-adW, KDeviceHeight - adH, adW, adH);
  128. }
  129. UIViewController *rootVC = [self getRootViewController];
  130. [[AdManager sharedManager] loadAndShowBannerAdWithFrame:frame InView:rootVC.view];
  131. }
  132. }
  133. -(void) consentInformationReset{
  134. [[AdManager sharedManager] consentInformationReset];
  135. }
  136. -(void)hideBannerAd {
  137. [[AdManager sharedManager] hiddenBannerAd];
  138. }
  139. -(void)loadInterstitialAd {
  140. [[AdManager sharedManager] loadInterstitialAd];
  141. }
  142. -(void)showInterstitialAd {
  143. UIViewController *rootVC = [self getRootViewController];
  144. [[AdManager sharedManager] showInterstitialAdWithViewController:rootVC];
  145. }
  146. -(void)loadRewardedVideoAd {
  147. [[AdManager sharedManager] loadRewardedVideoAd];
  148. }
  149. -(bool)hasRewardedVideo {
  150. return [[AdManager sharedManager] hasRewardedVideo];
  151. }
  152. -(bool)hasRewardedVideoWithID:(const char *)idStr {
  153. NSString *adID = [self cStrToNSString:idStr];
  154. return [[AdManager sharedManager] hasRewardedVideoWithAdID:adID];
  155. }
  156. -(const char *)getAllRewardedVideoIdsStates {
  157. return [self nsstringToCharWithStr:[[AdManager sharedManager] mopub_idsStatesArr]];
  158. }
  159. -(void)showRewardedVideoAd {
  160. UIViewController *rootVC = [self getRootViewController];
  161. [[AdManager sharedManager] showRewardedVideoAdWithViewController:rootVC];
  162. }
  163. -(void)showRewardedVideoAdWithID:(const char *)idStr {
  164. NSString *adID = [self cStrToNSString:idStr];
  165. UIViewController *rootVC = [self getRootViewController];
  166. [[AdManager sharedManager] showRewardedVideoAdWithViewController:rootVC videoID:adID];
  167. }
  168. -(void)loadRewardedInterstitialAd {
  169. [[AdManager sharedManager] loadRewardedInterstitialAd];
  170. }
  171. -(void)showRewardedInterstitialAd {
  172. UIViewController *rootVC = [self getRootViewController];
  173. [[AdManager sharedManager] showRewardedInterstitialAdWithViewController:rootVC];
  174. }
  175. -(void)loadAppOpenAd{
  176. [[AdManager sharedManager] loadAppOpenAd];
  177. }
  178. -(void)showAppOpenAd{
  179. UIViewController *rootVC = [self getRootViewController];
  180. [[AdManager sharedManager] showAppOpenAdWithViewController:rootVC];
  181. }
  182. -(void)loadFeedbackViewControllerWithDataStr:(const char *)dataStr {
  183. NSString *dataStrStr = [self cStrToNSString:dataStr];
  184. [[UnitlsManager shareM] loadFeedbackViewControllerWithData:dataStrStr];
  185. }
  186. -(void)loadFeedbackViewController {
  187. [[UnitlsManager shareM] loadFeedbackViewControllerWithData:@""];
  188. }
  189. #pragma mark - 统计相关函数
  190. - (void)customEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr {
  191. NSString *keyStrStr = [self cStrToNSString:keyStr];
  192. NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];
  193. [AnalyticsManager customEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];
  194. }
  195. /// 友盟自定义统计事件
  196. /// @param keyStr 事件名称
  197. /// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""
  198. - (void)umengCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{
  199. NSString *keyStrStr = [self cStrToNSString:keyStr];
  200. NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];
  201. [AnalyticsManager umengCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];
  202. }
  203. /// FireBase自定义统计事件
  204. /// @param keyStr 事件名称
  205. /// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""
  206. - (void)firebaseCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{
  207. NSString *keyStrStr = [self cStrToNSString:keyStr];
  208. NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];
  209. [AnalyticsManager firebaseCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];
  210. }
  211. /// AppsFlyer自定义统计事件
  212. /// @param keyStr 事件名称
  213. /// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""
  214. - (void)appsFlyerCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{
  215. NSString *keyStrStr = [self cStrToNSString:keyStr];
  216. NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];
  217. [AnalyticsManager appsFlyerCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];
  218. }
  219. /// Facebook自定义统计事件
  220. /// @param keyStr 事件名称
  221. /// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""
  222. - (void)facebookCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{
  223. NSString *keyStrStr = [self cStrToNSString:keyStr];
  224. NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];
  225. [AnalyticsManager facebookCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];
  226. }
  227. /// Facebook自定义统计事件 带需要统计总数参数的事件
  228. - (void)facebookCustomEventWithKey:(const char *)keyStr valueToSum:(double)valueS dicJsonStr:(const char *)dicJsonStr{
  229. NSString *keyStrStr = [self cStrToNSString:keyStr];
  230. NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];
  231. [AnalyticsManager facebookCustomEventWithKey:keyStrStr valueToSum:valueS dicJsonStr:dicJsonStrStr];
  232. }
  233. - (void)setUserLevelId:(int)level {
  234. // [AnalyticsManager setUserLevelId:level];
  235. }
  236. - (void)payWithCash:(double)cash isTest:(bool)isTest productID:(const char *)productID {
  237. NSString *productIDStr = [self cStrToNSString:productID];
  238. [AnalyticsManager payWithCash:cash isTest:isTest productID:productIDStr];
  239. }
  240. - (void)payWithCash:(double)cash source:(int)source coin:(double)coin {
  241. [AnalyticsManager payWithCash:cash source:source coin:coin];
  242. }
  243. - (void)payWithCash:(double)cash source:(int)source item:(const char *)item amount:(int)amount price:(double)price {
  244. NSString *itemStr = [self cStrToNSString:item];
  245. [AnalyticsManager payWithCash:cash source:source item:itemStr amount:amount price:price];
  246. }
  247. - (void)buyWithItem:(const char *)item amount:(int)amount price:(double)price {
  248. NSString *itemStr = [self cStrToNSString:item];
  249. [AnalyticsManager buyWithItem:itemStr amount:amount price:price];
  250. }
  251. - (void)useWithItem:(const char *)item amount:(int)amount price:(double)price {
  252. NSString *itemStr = [self cStrToNSString:item];
  253. [AnalyticsManager useWithItem:itemStr amount:amount price:price];
  254. }
  255. - (void)startLevel:(const char *)levelName {
  256. NSString *levelNameStr = [self cStrToNSString:levelName];
  257. [AnalyticsManager startLevel:levelNameStr];
  258. }
  259. - (void)finishLevel:(const char *)levelName {
  260. NSString *levelNameStr = [self cStrToNSString:levelName];
  261. [AnalyticsManager finishLevel:levelNameStr];
  262. }
  263. - (void)failLevel:(const char *)levelName {
  264. NSString *levelNameStr = [self cStrToNSString:levelName];
  265. [AnalyticsManager failLevel:levelNameStr];
  266. }
  267. - (void)bonus:(double)coin source:(int)source {
  268. [AnalyticsManager bonus:coin source:source];
  269. }
  270. - (void)bonus:(const char *)item amount:(int)amount price:(double)price source:(int)source {
  271. NSString *itemStr = [self cStrToNSString:item];
  272. [AnalyticsManager bonus:itemStr amount:amount price:price source:source];
  273. }
  274. #pragma mark - 内购
  275. /// App 专用共享密钥 ,假如应用内有自动续期订阅则必须使用该值
  276. -(void)initApplePayWithSharedSecretKey:(const char *)sharedSecretKey{
  277. NSString *sharedSecretKeyStr = [self cStrToNSString:sharedSecretKey];
  278. [[ApplePayAgent shareManager] initApplePayWithSharedSecretKey:sharedSecretKeyStr];
  279. }
  280. - (void)applePayWithProductId:(const char* )productId {
  281. NSString *productIdStr = [self cStrToNSString:productId];
  282. [ApplePayAgent shareManager].delegate = self;
  283. [[ApplePayAgent shareManager] payParams:productIdStr];
  284. }
  285. -(void)applePayWithProductId:(const char* )productId activeId:(const char* )activeId {
  286. NSString *productIdStr = [self cStrToNSString:productId];
  287. NSString *activeIdStr = [self cStrToNSString:activeId];
  288. [ApplePayAgent shareManager].delegate = self;
  289. [[ApplePayAgent shareManager] payParams:productIdStr activeId:activeIdStr];
  290. }
  291. -(void)appsflyerValidateWithSkuId:(const char*)skuId transactionIdentifier:(const char*)transactionId {
  292. NSString *skuIdStr = [self cStrToNSString:skuId];
  293. NSString *transactionIdStr = [self cStrToNSString:transactionId];
  294. [[ApplePayAgent shareManager] appsflyerValidateWithSkuId:skuIdStr transactionIdentifier:transactionIdStr];
  295. }
  296. -(void)restore {
  297. [ApplePayAgent shareManager].delegate = self;
  298. [[ApplePayAgent shareManager] restore];
  299. }
  300. -(void)getProductsInfoWithProductIds:(const char* )productIds {
  301. NSString *productIdsStr = [self cStrToNSString:productIds];
  302. [[ApplePayAgent shareManager] getProductsInfoWithProductsArrJsonStr:productIdsStr success:^(NSString *proInfos) {
  303. UnitySendMessage(kUnityObjectName, "SkuDetail", [self nsstringToCharWithStr:proInfos]);
  304. } failure:^(NSError *error) {
  305. UnitySendMessage(kUnityObjectName, "SkuDetail", "");
  306. }];
  307. }
  308. -(void)checkNoFinishTransaction{
  309. [ApplePayAgent shareManager].delegate = self;
  310. [[ApplePayAgent shareManager] checkNoFinishTransaction];
  311. }
  312. -(void)finshOneTransaction:(const char* )transactionId {
  313. NSString *transactionIdStr = [self cStrToNSString:transactionId];
  314. [[ApplePayAgent shareManager] finshOneTransactionWithTransactionID:transactionIdStr];
  315. }
  316. #pragma mark - 本地推送
  317. - (void)setLocalNoticeWithID:(int)identifier titleStr:(const char *)title bodyStr:(const char *)body delayInSeconds:(int)seconds{
  318. NSString *identifierStr = @(identifier).stringValue;
  319. NSString *titleStr = [self cStrToNSString:title];
  320. NSString *bodyStr = [self cStrToNSString:body];
  321. [[PushManager shareManager] setLocalNotificationWithID:identifierStr titleStr:titleStr bodyStr:bodyStr delayInSeconds:@(seconds)];
  322. }
  323. // 移除某一个指定的通知
  324. - (void)cancleLocalNotificationWithID:(int)identifier{
  325. NSString *identifierStr =@(identifier).stringValue;
  326. [[PushManager shareManager] cancleLocalNotificationWithID:identifierStr];
  327. }
  328. // 移除所有通知
  329. - (void)cancleAllLocalNotification{
  330. [[PushManager shareManager] cancleAllLocalNotification];
  331. }
  332. #pragma mark - 分享
  333. -(void)shareTextWithMsg:(const char *)msg {
  334. NSString *titleStr = [self cStrToNSString:msg];
  335. //分享的标题
  336. NSString *text =titleStr;
  337. //分享的图片
  338. //  UIImage *image= [UIImage imageNamed:@"分享的图片.png"];
  339. //分享的url
  340. // NSURL*url = [NSURL URLWithString:@"分享的url"];
  341. //把分项的文字, 图片, 链接放入数组
  342. NSArray*activityItems = @[text];
  343. UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
  344. //不出现在活动项目
  345. // activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
  346. //弹出分享的页面
  347. [[self getRootViewController] presentViewController:activityVC animated:YES completion:nil];
  348. // 分享后回调
  349. activityVC.completionWithItemsHandler= ^(UIActivityType _Nullable activityType,BOOL completed,NSArray*_Nullable returnedItems,NSError*_Nullable activityError) {
  350. if(completed) {
  351. NSLog(@"completed");
  352. //分享成功
  353. }else{
  354. NSLog(@"cancled");
  355. //分享取消
  356. }
  357. };
  358. }
  359. #pragma mark - 登录
  360. -(void)loginUseAppleSign {
  361. [[LoginManager shareM] setDelegate:self];
  362. if (@available(iOS 13.0, *)) {
  363. [[LoginManager shareM] loginUseAppleSign];
  364. } else {
  365. // Fallback on earlier versions
  366. NSLog(@"该方法(loginUseAppleSign)仅支持iOS 13版本及以上使用");
  367. }
  368. }
  369. -(void)loginUseFacebook {
  370. [[LoginManager shareM] setDelegate:self];
  371. [[LoginManager shareM] loginUseFacebook];
  372. }
  373. -(void)facebookLogOut{
  374. //[[LoginManager shareM] logOutFacebook];
  375. [[LoginManager shareM] setDelegate:self];
  376. [[LoginManager shareM] revokeAuthFacebook];
  377. }
  378. #pragma mark - GameCenter
  379. -(void)gameCenterLogin{
  380. [[GameCenterManager shareM] authPlayer];
  381. [GameCenterManager shareM].delegate = self;
  382. }
  383. //上传最高分
  384. -(void)saveHighScore:(const char *)leaderboardId score:(long int)score {
  385. NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];
  386. [[GameCenterManager shareM] saveHighScoreWithLeaderboardId:leaderboardIdStr score:@(score).intValue];
  387. }
  388. ///显示排行榜 可以跳转到自定的 game 排行榜 和 跳转到那个时间段
  389. - (void)ShowSystomGameCenterWithLeaderboardId:(const char *)leaderboardId time:(int)time{
  390. NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];
  391. [[GameCenterManager shareM] ShowSystomGameCenterWithLeaderboardId:leaderboardIdStr time:time];
  392. }
  393. ///获取排行榜信息 下载game center 某一排行榜中的分数及排名情况
  394. - (void)downLoadHighScoreWithTime:(int)timeType leaderboardId:(const char *)leaderboardId count:(int)count{
  395. NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];
  396. [[GameCenterManager shareM] downLoadHighScoreWithTime:timeType leaderboardId:leaderboardIdStr count:count];
  397. }
  398. ///获取排行榜信息 下载game center 某一排行榜中的分数及排名情况
  399. - (void)downLoadHighScoreWithTime:(int)timeType leaderboardId:(const char *)leaderboardId{
  400. NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];
  401. [[GameCenterManager shareM] downLoadHighScoreWithTime:timeType leaderboardId:leaderboardIdStr];
  402. }
  403. //上传存档
  404. -(void)uploadAcrive:(const char *)data name:(const char *)name {
  405. NSString *dataStr = [self cStrToNSString:data];
  406. NSString *nameStr = [self cStrToNSString:name];
  407. [[GameCenterManager shareM] uploadAcriveWithDataStr:dataStr name:nameStr];
  408. }
  409. //上传默认存档
  410. -(void)uploadAcrive:(const char *)data {
  411. NSString *dataStr = [self cStrToNSString:data];
  412. [[GameCenterManager shareM] uploadAcriveWithDataStr:dataStr name:@"GameData"];
  413. }
  414. //下载单个默认的存档
  415. -(void)downloadOneSavedAcrive {
  416. [[GameCenterManager shareM] loadSaveData:@"GameData"];
  417. }
  418. //下载存档数组
  419. -(void)downloadAllSavedAcrive {
  420. [[GameCenterManager shareM] fetchAllSavedGames];
  421. }
  422. //下载单个存档
  423. -(void)downloadOneSavedAcrive:(const char *)name {
  424. NSString *nameStr = [self cStrToNSString:name];
  425. [[GameCenterManager shareM] loadSaveData:nameStr];
  426. }
  427. //删除单个存档
  428. -(void)deleteOneSavedAcrive:(const char *)name {
  429. NSString *nameStr = [self cStrToNSString:name];
  430. [[GameCenterManager shareM] deleteSavedGamesWithName:nameStr];
  431. }
  432. //解决存档冲突
  433. -(void)resolveConflictingSavedGames:(const char *)data name:(const char *)name {
  434. NSString *dataStr = [self cStrToNSString:data];
  435. NSString *nameStr = [self cStrToNSString:name];
  436. [[GameCenterManager shareM] resolveConflictingSavedGames:dataStr name:nameStr];
  437. }
  438. #pragma mark - 获取设备信息和权限
  439. //获取友盟设备ID
  440. -(const char *)getUmengDeviceID {
  441. return [self nsstringToCharWithStr:[AnalyticsManager getUmengDeviceIDForIntegration]];
  442. }
  443. /// 获取设备IDFA
  444. -(const char *)getDeviceIDFA {
  445. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceIDFA]];
  446. }
  447. /// 获取设备IDFV
  448. -(const char *)getDeviceIDFV {
  449. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceIDFV]];
  450. }
  451. /// 获取设备UDID
  452. -(const char *)getDeviceUdid{
  453. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceUdid]];
  454. }
  455. /// 是否是异形屏
  456. -(BOOL)isAbnormityScreen{
  457. return [[ToolsManager sharedM] isAbnormityScreen];
  458. }
  459. /// 手机别名: 用户定义的名称
  460. -(const char *)getUserPhoneName{
  461. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getUserPhoneName]];
  462. }
  463. -(const char *)getCarrierName {
  464. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getCarrierName]];
  465. }
  466. -(const char *)getDeviceVersion {
  467. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceVersion]];
  468. }
  469. /// 获取设备系统版本
  470. -(const char *)getDeviceSystomVersion{
  471. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceSystomVersion]];
  472. }
  473. /// 获取设备信息
  474. -(const char *)getDeviceInfo{
  475. NSString *dicJson = [NSDictionary convertNSDictionaryToJsonString:[[ToolsManager sharedM] getDeviceInfo]];
  476. return [self nsstringToCharWithStr:dicJson];
  477. }
  478. -(const char *)getCurrentNetworkState{
  479. return [self nsstringToCharWithStr:[[ToolsManager sharedM] getCurrentNetworkState]];
  480. }
  481. /// 申请/验证某个权限(异步方法,需要配合authComplateWithTypeName回调方法使用)
  482. -(void)authorizeWithType:(int)typeInt{
  483. [[ToolsManager sharedM] authorizeWithType:typeInt];
  484. }
  485. /// 验证是否拥有某个权限
  486. -(BOOL)hasAuthorizeWithType:(int)typeInt{
  487. return [[ToolsManager sharedM] hasAuthorizeWithType:typeInt];
  488. }
  489. /// 显示系统提示框,提示用户去设置对应权限,点击设置跳转到设置页面
  490. -(void)showAlertViewWithTitle:(const char*)title msg:(const char*)message cancel:(const char*)cancel setting:(const char*)setting{
  491. NSString *titleStr = [self cStrToNSString:title];
  492. NSString *messageStr = [self cStrToNSString:message];
  493. NSString *cancelStr = [self cStrToNSString:cancel];
  494. NSString *settingStr = [self cStrToNSString:setting];
  495. [[ToolsManager sharedM] showAlertViewWithTitle:titleStr msg:messageStr cancel:cancelStr setting:settingStr];
  496. }
  497. -(void)shareToFacebookWithUrl:(const char*)url imagePath:(const char*)imagePath {
  498. [UnitlsManager shareM].delegate = self;
  499. [[UnitlsManager shareM] shareToFacebookWithUrl:[self cStrToNSString:url] imagePath:[self cStrToNSString:imagePath]];
  500. }
  501. -(void)shareImageToFacebookGamingWithImagePath:(const char*)imagePath title:(const char*)title{
  502. [UnitlsManager shareM].delegate = self;
  503. [[UnitlsManager shareM] shareImageToFacebookGamingWithImagePath:[self cStrToNSString:imagePath] caption:[self cStrToNSString:title]];
  504. }
  505. -(void)shareVideoToFacebookGamingWithImagePath:(const char*)imagePath title:(const char*)title {
  506. [UnitlsManager shareM].delegate = self;
  507. [[UnitlsManager shareM] shareVideoToFacebookGamingWithVideoPath:[self cStrToNSString:imagePath] caption:[self cStrToNSString:title]];
  508. }
  509. -(void)launchFacebookPlayerFinderDialog {
  510. [UnitlsManager shareM].delegate = self;
  511. [[UnitlsManager shareM] launchFacebookPlayerFinderDialog];
  512. }
  513. //@TODO:FaceBook回调方法
  514. -(void)facebookShareComplete:(NSDictionary *)dic {
  515. NSNumber *state = dic[key_states];
  516. UnitySendMessage(kUnityObjectName, "facebookShareComplete", [self nsstringToCharWithStr:state.stringValue]);
  517. }
  518. -(void)facebookShareUploadComplete:(NSDictionary *)dic{
  519. NSString *msg = dic[msg];
  520. UnitySendMessage(kUnityObjectName, "facebookUploadComplete", [self nsstringToCharWithStr:msg]);
  521. }
  522. -(void)facebookPlayerFinderComplete:(NSDictionary *)dic{
  523. NSString *msg = dic[msg];
  524. UnitySendMessage(kUnityObjectName, "facebookFriendFinderResult", [self nsstringToCharWithStr:msg]);
  525. }
  526. #pragma mark - Api接口相关函数
  527. /// 初始化网络请求所需参数
  528. -(void)initServicesGameID:(const char *)gameId gameSecret:(const char *)gameSecret isDebug:(int)isDebug {
  529. NSString *gameIdStr = [self cStrToNSString:gameId];
  530. NSString *gameSecretStr = [self cStrToNSString:gameSecret];
  531. [[YLApisManager sharedManager] initSDKWithGameID:gameIdStr signStr:gameSecretStr isDebug:isDebug];
  532. [YLApisManager sharedManager].delegate = self;
  533. [[AdManager sharedManager] initServicesGameID:gameIdStr gameSecret:gameSecretStr isDebug:isDebug];
  534. }
  535. /// 初始化网络请求
  536. -(void)initServicesGameID:(const char *)gameId gameSecret:(const char *)gameSecret baseUrl:(const char *)baseUrl {
  537. NSString *gameIdStr = [self cStrToNSString:gameId];
  538. NSString *gameSecretStr = [self cStrToNSString:gameSecret];
  539. NSString *baseUrlStr = [self cStrToNSString:baseUrl];
  540. [[YLApisManager sharedManager] initSDKWithGameID:gameIdStr signStr:gameSecretStr baseUrl:baseUrlStr];
  541. [YLApisManager sharedManager].delegate = self;
  542. [[AdManager sharedManager] initServicesGameID:gameIdStr gameSecret:gameSecretStr baseUrl:baseUrlStr];
  543. }
  544. //提交反馈
  545. -(void)feedBackSubmitWithMsg:(const char *)msg connect:(const char* )connect docInfo:(const char* )docInfo {
  546. NSString *msgStr = [self cStrToNSString:msg];
  547. NSString *connectStr = [self cStrToNSString:connect];
  548. NSString *docInfoStr = [self cStrToNSString:docInfo];
  549. [[AdManager sharedManager] feedbackSubmitWithMsg:msgStr contact:connectStr documentinfo:docInfoStr];
  550. }
  551. /// 获取活动列表
  552. /// @param channel 渠道标识 0:官方包3:vivo 4:oppo 5:huawei 6:4399 7:应用宝8:xiaomi或其他在后台渠道管理页面定义的标识
  553. /// @param language 公告本地化关键词 CN-简体中文,TW-繁体中文,US-英文
  554. -(void)getActivitiesWithChannel:(const char *)channel language:(const char *)language {
  555. NSString *channelStr = [self cStrToNSString:channel];
  556. NSString *languageStr = [self cStrToNSString:language];
  557. [[YLApisManager sharedManager] getActivitiesWithChannel:channelStr language:languageStr];
  558. }
  559. /// 获取广告列表
  560. /// @param channel 渠道标识 0:官方包3:vivo 4:oppo 5:huawei 6:4399 7:应用宝8:xiaomi或其他在后台渠道管理页面定义的标识
  561. /// @param version 适用的版本
  562. /// @param language 公告本地化关键词 CN-简体中文,TW-繁体中文,US-英文
  563. -(void)getGameAnoncementsWithChannel:(const char *)channel version:(const char *)version language:(const char *)language {
  564. NSString *channelStr = [self cStrToNSString:channel];
  565. NSString *versionStr = [self cStrToNSString:version];
  566. NSString *languageStr = [self cStrToNSString:language];
  567. [[YLApisManager sharedManager] getGameAnoncementsWithChannel:channelStr version:versionStr language:languageStr];
  568. }
  569. ///渠道下单接口,根据不同渠道需要的数据不同 返回的数据结构不同,前端需要根据情况解析
  570. -(void)channelPayOrderWithChannel:(const char *)channel goodsId:(const char *)goodsId{
  571. NSString *channelStr = [self cStrToNSString:channel];
  572. NSString *goodsIdStr = [self cStrToNSString:goodsId];
  573. [[YLApisManager sharedManager] channelPayOrderWithChannel:channelStr goodsId:goodsIdStr];
  574. }
  575. //-(void)channelPay4399Notify;
  576. //-(void)channelPayOppoNotifyWithChannel:(const char *)channel;
  577. //获取当前游戏,渠道的最新版本 返回结果无加密
  578. -(void)channelpayGetAppVersionWithChannel:(int)channel{
  579. [[YLApisManager sharedManager] channelpayGetAppVersionWithChannel:@(channel)];
  580. }
  581. ///获取服务器配置 appver:如果不需要根据版本判断可以串0 lastver:每次全新获取传0
  582. -(void)configSyncWithAppVer:(const char *)appVer lastVer:(int)lastVer {
  583. NSString *appVerStr = [self cStrToNSString:appVer];
  584. [[YLApisManager sharedManager] configSyncWithAppVer:appVerStr lastVer:@(lastVer)];
  585. }
  586. ///获取服务器配置 appver:如果不需要根据版本判断可以串0 lastver:每次全新获取传0
  587. -(void)configServerInfo {
  588. [[YLApisManager sharedManager] configServerinfo];
  589. }
  590. ///兑换码兑换接口
  591. -(void)dedeemConsumeWithRedeemCode:(const char *)redeemCode {
  592. NSString *redeemCodeStr = [self cStrToNSString:redeemCode];
  593. [[YLApisManager sharedManager] dedeemConsumeWithRedeemCode:redeemCodeStr];
  594. }
  595. ///根据渠道兑换码兑换接口
  596. -(void)redeemConsumeWithRedeemCode:(const char *)redeemCode channel:(const char *)channel{
  597. NSString *redeemCodeStr = [self cStrToNSString:redeemCode];
  598. NSString *channelStr = [self cStrToNSString:channel];
  599. [[YLApisManager sharedManager] redeemConsumeWithRedeemCode:redeemCodeStr channel:channelStr];
  600. }
  601. /// 根据渠道和用户兑换码兑换接口
  602. /// @param channel 渠道标识 0:官方包 3:vivo 4:oppo 5:huawei 6:4399 7:应用宝 8:xiaomi 或其他在后台渠道管理页面定义的标识
  603. -(void)redeemUserConsumeWithRedeemCode:(const char *)redeemCode channel:(const char *)channel clientId:(const char *)clientId {
  604. NSString *redeemCodeStr = [self cStrToNSString:redeemCode];
  605. NSString *channelStr = [self cStrToNSString:channel];
  606. NSString *clientIdStr = [self cStrToNSString:clientId];
  607. [[YLApisManager sharedManager] redeemUserConsumeWithRedeemCode:redeemCodeStr channel:channelStr clientId:clientIdStr];
  608. }
  609. ///登录接口微信-游客 登录之后返回token,每次操作验证token 请求需要签名,返回数据无加密
  610. -(void)userLoginWithMarkId:(const char *)markId type:(int)type name:(const char *)name iconurlStr:(const char *)icon {
  611. NSString *markIdStr = [self cStrToNSString:markId];
  612. NSString *nameStr = [self cStrToNSString:name];
  613. NSString *iconStr = [self cStrToNSString:icon];
  614. [[YLApisManager sharedManager] userLoginWithMarkId:markIdStr type:@(type) name:nameStr iconurlStr:iconStr];
  615. }
  616. ///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密
  617. -(void)userSyncWithArchive:(const char *)archive archiveVersion:(int)archiveVersion {
  618. NSString *archiveStr = [self cStrToNSString:archive];
  619. [[YLApisManager sharedManager] userSyncWithArchive:archiveStr archiveVersion:@(archiveVersion)];
  620. }
  621. ///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 3.文件流不加入签名 4.返回字符串编码为ascii 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密
  622. -(void)userSyncStream {
  623. [[YLApisManager sharedManager] userSyncStream];
  624. }
  625. ///心跳检测,判断当前客户端登陆是否有效 请求需要签名,返回数据无加密
  626. -(void)userHeartbeat {
  627. [[YLApisManager sharedManager] userHeartbeat];
  628. }
  629. ///用户下订接口,下单成功之后返回支付链接 -跳转支付页面
  630. -(void)userOrderWithGoodsId:(const char *)goodsId {
  631. NSString *goodsIdStr = [self cStrToNSString:goodsId];
  632. [[YLApisManager sharedManager] userOrderWithGoodsId:goodsIdStr];
  633. }
  634. ///恢复购买,查看已完成的所有订单,以及消耗状态 请求需要签名,返回结果有加密
  635. -(void)userResumePurchase {
  636. [[YLApisManager sharedManager] userResumePurchase];
  637. }
  638. ///订单消耗 请求需要签名,返回结果有加密
  639. -(void)userConsumeWithGoodsId:(const char *)goodsId orderId:(const char *)orderId {
  640. NSString *orderIdStr = [self cStrToNSString:orderId];
  641. NSString *goodsIdStr = [self cStrToNSString:goodsId];
  642. [[YLApisManager sharedManager] userConsumeWithGoodsId:goodsIdStr orderId:orderIdStr];
  643. }
  644. ///查询单个订单的状态 用来处理非消耗性商品,判断订单是否支付完成 返回结果有加密 Orderstatus - 0 未购买 1 已购买 未消耗 2 已购买 已消耗
  645. /// @param goodsId 商品ID
  646. /// @param orderId 订单ID
  647. -(void)userQueryOrderWithGoodsId:(const char *)goodsId orderId:(const char *)orderId {
  648. NSString *orderIdStr = [self cStrToNSString:orderId];
  649. NSString *goodsIdStr = [self cStrToNSString:goodsId];
  650. [[YLApisManager sharedManager] userQueryOrderWithGoodsId:goodsIdStr orderId:orderIdStr];
  651. }
  652. ///获取排行榜 用户信息
  653. -(void)userLeaderboard {
  654. [[YLApisManager sharedManager] userLeaderboard];
  655. }
  656. ///提交用户分数 返回用户排行榜信息,返回结果无加密
  657. -(void)userUploadScoreWithScore:(int)score info:(const char *)info rankingId:(const char *)rankingId {
  658. NSString *infoStr = [self cStrToNSString:info];
  659. NSString *rankingIdStr = [self cStrToNSString:rankingId];
  660. [[YLApisManager sharedManager] userUploadScoreWithScore:@(score) info:infoStr rankingId:rankingIdStr];
  661. }
  662. ///获取用户自己的排名
  663. -(void)userGetUserRankWithRankingId:(const char *)rankingId {
  664. NSString *rankingIdStr = [self cStrToNSString:rankingId];
  665. [[YLApisManager sharedManager] userGetUserRankWithRankingId:rankingIdStr];
  666. }
  667. -(void)payrecordSubmit{
  668. [[YLApisManager sharedManager] payrecordSubmit];
  669. }
  670. -(void)overseaPayAppleValidateWithReceipt:(const char *)receipt appleOrderId:(const char *)appleOrderId sku:(const char *)sku skuType:(const char *)skuType price:(const char *)price actId:(const char *)actId {
  671. NSString *receiptStr = [self cStrToNSString:receipt];
  672. NSString *appleOrderIdStr = [self cStrToNSString:appleOrderId];
  673. NSString *skuStr = [self cStrToNSString:sku];
  674. NSString *skuTypeStr = [self cStrToNSString:skuType];
  675. NSString *priceStr = [self cStrToNSString:price];
  676. NSString *actIdStr = [self cStrToNSString:actId];
  677. [[YLApisManager sharedManager] overseaPayAppleValidateWithReceipt:receiptStr appleOrderId:appleOrderIdStr sku:skuStr skuType:skuTypeStr price:priceStr actId:actIdStr];
  678. }
  679. -(void)gamekeyinfoUploadWithInfoJson:(const char*)infoJson{
  680. NSString *infoJsonStr = [self cStrToNSString:infoJson];
  681. [[YLApisManager sharedManager] gamekeyinfoUploadWithInfoJson:infoJsonStr];
  682. }
  683. /// 获取后台配置的所有商品信息
  684. -(void)getAllGoods{
  685. [[YLApisManager sharedManager] getAllGoods];
  686. }
  687. #pragma mark - 显示自带网页
  688. //弹出游戏推荐
  689. -(void)showGameRecommendWebView {
  690. [UnitlsManager shareM].delegate = self;
  691. [[UnitlsManager shareM] loadShareWebViewVC];
  692. }
  693. -(void)ShowGameForumWebView {
  694. [UnitlsManager shareM].delegate = self;
  695. [[UnitlsManager shareM] loadShareWebViewVC];
  696. }
  697. //根据网址传入展示网页
  698. -(void)showWebViewWithUrl:(const char *)url {
  699. NSString *urlStr = [self cStrToNSString:url];
  700. [UnitlsManager shareM].delegate = self;
  701. [[UnitlsManager shareM] showOneWebViewWithUrlStr:urlStr];
  702. }
  703. -(void)showForumWebViewVCWithGameId:(const char *)gameId userId:(const char *)userId email:(const char *)email{
  704. NSString *gameIdStr = [self cStrToNSString:gameId];
  705. NSString *userIdStr = [self cStrToNSString:userId];
  706. NSString *emailStr = [self cStrToNSString:email];
  707. [UnitlsManager shareM].delegate = self;
  708. [[UnitlsManager shareM] loadForumWebViewVCWithGameId:gameIdStr userId:userIdStr email:emailStr];
  709. }
  710. #pragma mark - 工具方法
  711. /// 跳转到App Store中撰写评论和评分
  712. /// @param appID 苹果应用ID
  713. -(void)gotoAppStoreWriteReviewWithAppId:(const char *)appID {
  714. NSString *appIDStr = [self cStrToNSString:appID];
  715. [[UnitlsManager shareM] gotoAppStoreWriteReviewWithAppId:appIDStr];
  716. }
  717. -(void)showSysReview{
  718. [[UnitlsManager shareM] showSysReview];
  719. }
  720. #pragma mark - 协议函数
  721. /**
  722. UnitySendMessage(<#const char *#>, <#const char *#>, <#const char *#>);
  723. * 第一个参数:是unity那边创建的场景对象名
  724. * 第二个参数:这个对象绑定的C#脚本中的方法
  725. * 第三个参数:是iOS这边要传给unity那边的参数
  726. */
  727. //banner加载成功
  728. -(void)bannerDidLoadAd {
  729. UnitySendMessage(kUnityObjectName, "bannerDidLoadAd", "");
  730. }
  731. //banner加载失败
  732. -(void)bannerDidFailToLoadWithMsg:(NSString *)errMsg {
  733. UnitySendMessage(kUnityObjectName, "bannerDidFailToLoadWithMsg", [self nsstringToCharWithStr:errMsg]);
  734. }
  735. //banner接收到点击事件
  736. -(void)bannerDidReceiveTapEvent {
  737. UnitySendMessage(kUnityObjectName, "bannerDidReceiveTapEvent", "");
  738. }
  739. /**
  740. interstitial加载成功
  741. */
  742. -(void)interstitialDidLoadAd {
  743. UnitySendMessage(kUnityObjectName, "interstitialDidLoadAd", "");
  744. }
  745. /**
  746. interstitial加载失败, 仅在手动加载单条广告且加载失败时才会调用
  747. @param errMsg 错误msg
  748. */
  749. -(void)interstitialDidFailToLoadWithMsg:(NSString *)errMsg {
  750. UnitySendMessage(kUnityObjectName, "interstitialDidFailToLoadWithMsg", [self nsstringToCharWithStr:errMsg]);
  751. }
  752. /**
  753. interstitial接收到点击事件
  754. */
  755. -(void)interstitialDidReceiveTapEvent {
  756. UnitySendMessage(kUnityObjectName, "interstitialDidReceiveTapEvent", "");
  757. }
  758. /**
  759. interstitial已经显示
  760. */
  761. -(void)interstitialDidAppear {
  762. UnityPause(true);
  763. UnitySendMessage(kUnityObjectName, "interstitialDidAppear", "");
  764. }
  765. /**
  766. interstitial已经关闭
  767. */
  768. -(void)interstitialDidDisappear {
  769. UnityPause(false);
  770. UnitySendMessage(kUnityObjectName, "interstitialDidDisappear", "");
  771. }
  772. /**
  773. rewardedVideo加载成功
  774. */
  775. -(void)rewardedVideoDidLoadAd {
  776. UnitySendMessage(kUnityObjectName, "rewardedVideoDidLoadAd", "");
  777. }
  778. /**
  779. rewardedVideo加载失败, 仅在手动加载单条广告且加载失败时才会调用
  780. @param errMsg 错误msg
  781. */
  782. -(void)rewardedVideoDidFailToLoadWithMsg:(NSString *)errMsg {
  783. UnitySendMessage(kUnityObjectName, "rewardedVideoDidFailToLoadWithMsg", [self nsstringToCharWithStr:errMsg]);
  784. }
  785. /**
  786. rewardedVideo接收到点击事件
  787. */
  788. -(void)rewardedVideoDidReceiveTapEvent {
  789. UnitySendMessage(kUnityObjectName, "rewardedVideoDidReceiveTapEvent", "");
  790. }
  791. /**
  792. rewardedVideo已经显示
  793. */
  794. -(void)rewardedVideoDidAppear {
  795. UnityPause(true);
  796. UnitySendMessage(kUnityObjectName, "rewardedVideoDidAppear", "");
  797. }
  798. /**
  799. rewardedVideo已经关闭
  800. */
  801. -(void)rewardedVideoDidDisappear {
  802. UnityPause(false);
  803. UnitySendMessage(kUnityObjectName, "rewardedVideoDidDisappear", "");
  804. }
  805. /**
  806. rewardedVideo播放完成,应该给予奖励
  807. */
  808. -(void)rewardedVideoAdShouldReward {
  809. UnitySendMessage(kUnityObjectName, "rewardedVideoAdShouldReward", "");
  810. }
  811. -(void)rewardedVideoAdDidFailToPlayWithMsg:(NSString *)errMsg{
  812. UnitySendMessage(kUnityObjectName, "rewardedVideoAdDidFailToPlayWithMsg", [self nsstringToCharWithStr:errMsg]);
  813. }
  814. -(void)rewardedVideoStatesWithJsonStr:(NSString *)jsonStr {
  815. UnitySendMessage(kUnityObjectName, "hasRewardedVideo", [self nsstringToCharWithStr:jsonStr]);
  816. }
  817. //屏式激励视频
  818. -(void)rewardedInterstitialDidLoadAd {
  819. UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidLoadAd", "");
  820. }
  821. -(void)rewardedInterstitialDidFailToLoadWithMsg:(NSString *)errMsg {
  822. UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidFailToLoadWithMsg", [self nsstringToCharWithStr:errMsg]);
  823. }
  824. -(void)rewardedInterstitialDidReceiveTapEvent {
  825. UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidReceiveTapEvent", "");
  826. }
  827. -(void)rewardedInterstitialDidAppear {
  828. UnityPause(true);
  829. UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidAppear", "");
  830. }
  831. -(void)rewardedInterstitialDidDisappear {
  832. UnityPause(false);
  833. UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidDisappear", "");
  834. }
  835. -(void)rewardedInterstitialAdShouldReward {
  836. UnitySendMessage(kUnityObjectName, "rewardedInterstitialAdShouldReward", "");
  837. }
  838. -(void)rewardedInterstitialAdDidFailToPlayWithMsg:(NSString *)errMsg{
  839. UnitySendMessage(kUnityObjectName, "rewardedInterstitialAdDidFailToPlayWithMsg", [self nsstringToCharWithStr:errMsg]);
  840. }
  841. //APP 开屏广告
  842. -(void)appOpenAdDidLoad{
  843. UnitySendMessage(kUnityObjectName, "appOpenAdDidLoad", "");
  844. }
  845. -(void)appOpenAdDidFailToLoadWithMsg:(NSString *)errMsg{
  846. UnitySendMessage(kUnityObjectName, "appOpenAdDidFailToLoad", [self nsstringToCharWithStr:errMsg]);
  847. }
  848. -(void)appOpenAdDidReceiveTapEvent{
  849. UnitySendMessage(kUnityObjectName, "appOpenAdDidReceiveTapEvent", "");
  850. }
  851. -(void)appOpenAdDidAppear{
  852. UnitySendMessage(kUnityObjectName, "appOpenAdDidAppear", "");
  853. }
  854. -(void)appOpenAdDidDisappear{
  855. UnitySendMessage(kUnityObjectName, "appOpenAdDidDisappear", "");
  856. }
  857. -(void)appOpenAdShouldReward{
  858. UnitySendMessage(kUnityObjectName, "appOpenAdShouldReward", "");
  859. }
  860. -(void)appOpenAdDidFailToPlayWithMsg:(NSString *)errMsg{
  861. UnitySendMessage(kUnityObjectName, "appOpenAdDidFailToPlay", [self nsstringToCharWithStr:errMsg]);
  862. }
  863. /**
  864. appsFlyer归因数据回调
  865. */
  866. -(void)appsFlyerTrackerDataWithJsonStr:(NSString *)jsonStr{
  867. UnitySendMessage(kUnityObjectName, "ConversionData", [self nsstringToCharWithStr:jsonStr]);
  868. }
  869. /**
  870. mopub广告数据回调
  871. */
  872. -(void)mopubAdIncomeDataWithJsonStr:(NSString *)jsonStr {
  873. UnitySendMessage(kUnityObjectName, "ImpressionData", [self nsstringToCharWithStr:jsonStr]);
  874. }
  875. #pragma mark - 内购回调
  876. -(void)applePayHaveResultWithMsg:(NSDictionary *)msgDic{
  877. NSNumber *codeNum = msgDic[Des_Code_Key];
  878. NSString *msg = msgDic[Des_Msg_Key];
  879. NSLog(@"%@", msg);
  880. UnitySendMessage(kUnityObjectName, "internalPayResult", [self nsstringToCharWithStr:codeNum.stringValue]);
  881. if (codeNum.intValue == 1) { //支付成功
  882. NSLog(@"支付成功");
  883. NSDictionary *dic = @{
  884. Des_Code_Key:@(1),
  885. Des_Msg_Key:msgDic[Des_Msg_Key],
  886. @"orderId":msgDic[PayTradeIdKey],
  887. @"packageName":@"",
  888. @"productId":msgDic[PayproductIdKey],
  889. @"purchaseTime":msgDic[PayPayTimeKey],
  890. @"purchaseState":@(1),
  891. @"purchaseToken":msgDic[PayReceiptKey]?:@"",
  892. @"acknowledged":@(NO)
  893. };
  894. //支付成功后获取详细支付数据
  895. UnitySendMessage(kUnityObjectName, "acknowledgePurchase", [self nsstringToCharWithStr:[NSDictionary convertNSDictionaryToJsonString:dic]]);
  896. }else{ //支付失败
  897. NSLog(@"支付失败");
  898. }
  899. }
  900. -(void)reStoreHaveResultWithMsg:(NSDictionary *)msgDic{
  901. NSNumber *codeNum = msgDic[Des_Code_Key];
  902. NSString *msg = msgDic[Des_Msg_Key];
  903. NSString *msgStr = msgDic[PayDescriptionKey];
  904. UnitySendMessage(kUnityObjectName, "restoreResult", [self nsstringToCharWithStr:msgStr]);
  905. if (codeNum.intValue == 1) { //支付成功
  906. NSLog(@"恢复购买成功");
  907. }else{ //支付失败
  908. NSLog(@"恢复购买失败,失败原因:%@", msg);
  909. }
  910. }
  911. -(void)applePayHaveNoFinishTransactionWithMsg:(NSArray *)msgArr arrJson:(NSString *)arrJson{
  912. UnitySendMessage(kUnityObjectName, "Purchase", [self nsstringToCharWithStr:arrJson]);
  913. }
  914. //支付校验成功
  915. -(void)overseaPayAppleValidateHaveResultWithMsg:(NSDictionary *)msgDic{
  916. UnitySendMessage(kUnityObjectName, "Validate", [self nsstringToCharWithStr:[NSDictionary convertNSDictionaryToJsonString:msgDic]]);
  917. }
  918. -(void)showAlertWithTitle:(const char*)title {
  919. UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:[self cStrToNSString:title] preferredStyle:(UIAlertControllerStyleAlert)];
  920. UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {
  921. }];
  922. [alertVC addAction:okAction];
  923. UIViewController *rootVC = [self getRootViewController];
  924. [rootVC presentViewController:alertVC animated:YES completion:nil];
  925. }
  926. -(void)loginUseAppleSignDidCompleteWithDic:(NSDictionary *)msgDic{
  927. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  928. UnitySendMessage(kUnityObjectName, "loginDidComplete", [self nsstringToCharWithStr:jsonStr]);
  929. }
  930. -(void)loginUseFacebookDidCompleteWithDic:(NSDictionary *)msgDic {
  931. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  932. UnitySendMessage(kUnityObjectName, "loginUseFacebookDidComplete", [self nsstringToCharWithStr:jsonStr]);
  933. }
  934. -(void)revokeAuthFacebookDicCompleteWithiDic:(NSDictionary *)msgDic{
  935. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  936. UnitySendMessage(kUnityObjectName, "loginUseFacebookDidComplete", [self nsstringToCharWithStr:jsonStr]);
  937. if[([msgDic objectForKey:@"Code"] isEqual:@(201)]){
  938. [admobHelper loginUseFacebook];
  939. }
  940. }
  941. #pragma mark - 接口请求回调函数
  942. -(void)feedBackSubmitComplectedWithJsonStr:(NSString *)jsonStr{
  943. UnitySendMessage(kUnityObjectName, "feedBackSubmitComplected", [self nsstringToCharWithStr:jsonStr]);
  944. }
  945. #pragma mark - Api接口协议函数
  946. /**
  947. UnitySendMessage(<#const char *#>, <#const char *#>, <#const char *#>);
  948. * 第一个参数:是unity那边创建的场景对象名
  949. * 第二个参数:这个对象绑定的C#脚本中的方法
  950. * 第三个参数:是iOS这边要传给unity那边的参数
  951. * UnitySendMessage(kUnityObjectName, "onBannerLoaded", [self nsstringToCharWithStr:adID]);
  952. */
  953. -(void)requestSucessedWithMethodName:(NSString *)methodName jsonStr:(NSString *)jsonStr{
  954. if ([methodName isEqualToString:Mn_overseaPayUserAppleValidate]) {
  955. methodName = Mn_overseaPayAppleValidate;
  956. }
  957. UnitySendMessage(kUnityObjectServicesName, [self nsstringToCharWithStr:methodName], [self nsstringToCharWithStr:jsonStr]);
  958. }
  959. -(void)requestFailWithMethodName:(NSString *)methodName errorStr:(NSString *)errorStr{
  960. if ([methodName isEqualToString:Mn_overseaPayUserAppleValidate]) {
  961. methodName = Mn_overseaPayAppleValidate;
  962. }
  963. UnitySendMessage(kUnityObjectServicesName, [self nsstringToCharWithStr:methodName], [self nsstringToCharWithStr:errorStr]);
  964. }
  965. -(const char *)nsstringToCharWithStr:(NSString *)str {
  966. const char *charString = "";
  967. if ([str canBeConvertedToEncoding:NSUTF8StringEncoding]) {
  968. charString = [str cStringUsingEncoding:NSUTF8StringEncoding];
  969. }
  970. return charString;
  971. }
  972. #pragma mark - 网页展示回调函数
  973. -(void)webviewDidOpen {
  974. UnitySendMessage(kUnityObjectName, "webviewDidOpen", "");
  975. }
  976. -(void)webviewDidClose {
  977. UnitySendMessage(kUnityObjectName, "webviewDidClose", "");
  978. }
  979. #pragma mark - GameCenter回调函数
  980. -(void)loginGameCenterDidCompleteWithDic:(NSDictionary *)msgDic{
  981. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  982. UnitySendMessage(kUnityObjectName, "loginGame", [self nsstringToCharWithStr:jsonStr]);
  983. }
  984. -(void)upLoadArchiveDidCompleteWithDic:(NSDictionary *)msgDic {
  985. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  986. UnitySendMessage(kUnityObjectName, "saveGame", [self nsstringToCharWithStr:jsonStr]);
  987. }
  988. -(void)downLoadOneArchiveDidCompleteWithDic:(NSDictionary *)msgDic archiveName:(NSString *)archiveName{
  989. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  990. UnitySendMessage(kUnityObjectName, "loadGame", [self nsstringToCharWithStr:jsonStr]);
  991. }
  992. -(void)downLoadArchiveDidCompleteWithDic:(NSDictionary *)msgDic{
  993. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  994. UnitySendMessage(kUnityObjectName, "loadAllGame", [self nsstringToCharWithStr:jsonStr]);
  995. }
  996. -(void)deleteArchiveDidCompleteWithDic:(NSDictionary *)msgDic{
  997. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  998. UnitySendMessage(kUnityObjectName, "deleteGame", [self nsstringToCharWithStr:jsonStr]);
  999. }
  1000. /// 解决存档冲突回调
  1001. -(void)resolveConflictingOfArchiveDidCompleteWithDic:(NSDictionary *)msgDic{
  1002. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  1003. UnitySendMessage(kUnityObjectName, "resolveConflictGame", [self nsstringToCharWithStr:jsonStr]);
  1004. }
  1005. -(void)uploadHighScoreDidCompleteWithDic:(NSDictionary *)msgDic {
  1006. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  1007. UnitySendMessage(kUnityObjectName, "uploadHighScore", [self nsstringToCharWithStr:jsonStr]);
  1008. }
  1009. -(void)downLoadHighScoreDidCompleteWithDic:(NSDictionary *)msgDic{
  1010. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  1011. UnitySendMessage(kUnityObjectName, "downLoadHighScore", [self nsstringToCharWithStr:jsonStr]);
  1012. }
  1013. -(void)systomGameCenterDidClose{
  1014. UnitySendMessage(kUnityObjectName, "systomLeaderboardVcDidClose", "");
  1015. }
  1016. #pragma mark - 设备权限回调
  1017. -(void)authComplateWithTypeName:(NSString *)typeName granted:(BOOL)granted firstTime:(BOOL)firstTime{
  1018. NSDictionary *msgDic = @{@"typeName":typeName, @"granted":@(granted), @"firstTime":@(firstTime)};
  1019. NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];
  1020. UnitySendMessage(kUnityObjectName, "authComplate", [self nsstringToCharWithStr:jsonStr]);
  1021. }
  1022. #pragma mark - C++方法
  1023. #if defined(__cplusplus)
  1024. extern "C"{
  1025. #endif
  1026. AdmobSdkUnityAdapter *admobHelper = [[AdmobSdkUnityAdapter alloc] init];
  1027. //将char字符串进行一次copy,避免直接返回字符串给Unity时,无法正常返回值
  1028. static const char *yl_cStringCopy(const char *string) {
  1029. if (!string) {
  1030. return NULL;
  1031. }
  1032. char *res = (char *)malloc(strlen(string) + 1);
  1033. strcpy(res, string);
  1034. return res;
  1035. }
  1036. //TODO:供u3d调用的c函数
  1037. ///adUnitsJson 同firebase的json字符串
  1038. void InitUnityAdSdk(const char * adUnitsJson,const char * appAppleId,const char * umengId,const char * appsFlyerKey, const char * channel, const char * pangleAppID) {
  1039. [admobHelper initUnityAdSdkWithAdUnitsJson:adUnitsJson appAppleId:appAppleId umengId:umengId appsFlyerKey:appsFlyerKey channel:channel pangleAppID:pangleAppID];
  1040. }
  1041. void SetRepeatTime(int time){
  1042. [admobHelper setRepeatTimeWithTime:time];
  1043. }
  1044. void IsDebug(bool isDebug) {
  1045. [admobHelper isDebug:isDebug];
  1046. }
  1047. ///开启定时自动加载广告
  1048. void AutoLoadAd() {
  1049. [admobHelper openAutoLoadAd];
  1050. }
  1051. ///TODO:广告相关函数
  1052. void LoadAndShowBannerAd(const char *adPostion, int bannerHeight) {
  1053. [admobHelper loadAndShowBannerAdWithAdPostion:adPostion bannerHeight:bannerHeight];
  1054. }
  1055. void consentInformationReset(){
  1056. [admobHelper consentInformationReset];
  1057. }
  1058. void HideBannerAd() {
  1059. [admobHelper hideBannerAd];
  1060. }
  1061. void LoadInterstitialAd() {
  1062. [admobHelper loadInterstitialAd];
  1063. }
  1064. void ShowInterstitialAd() {
  1065. [admobHelper showInterstitialAd];
  1066. }
  1067. void LoadRewardedVideoAd() {
  1068. [admobHelper loadRewardedVideoAd];
  1069. }
  1070. bool HasRewardedVideo() {
  1071. return [admobHelper hasRewardedVideo];
  1072. }
  1073. bool hasRewardedVideo(const char *idStr) {
  1074. return [admobHelper hasRewardedVideoWithID:idStr];
  1075. }
  1076. const char * GetAllRewardedVideoIdsStates(){
  1077. return yl_cStringCopy([admobHelper getAllRewardedVideoIdsStates]);
  1078. }
  1079. void ShowRewardedVideoAd() {
  1080. [admobHelper showRewardedVideoAd];
  1081. }
  1082. void showRewardedVideoAd(const char *idStr) {
  1083. [admobHelper showRewardedVideoAd];
  1084. }
  1085. void LoadRewardedInterstitialAd(){
  1086. [admobHelper loadRewardedInterstitialAd];
  1087. }
  1088. void ShowRewardedInterstitialAd(){
  1089. [admobHelper showRewardedInterstitialAd];
  1090. }
  1091. void LoadAppOpenAd(){
  1092. [admobHelper loadAppOpenAd];
  1093. }
  1094. void ShowAppOpenAd(){
  1095. [admobHelper showAppOpenAd];
  1096. }
  1097. void ShowOneAlertView(const char *mesStr) {
  1098. [admobHelper showAlertWithTitle:mesStr];
  1099. }
  1100. //TODO:统计相关函数
  1101. void CustomEvent(const char * key, const char * dicJson) {
  1102. [admobHelper customEventWithKey:key dicJsonStr:dicJson];
  1103. }
  1104. void UmengCustomEvent(const char * key, const char * dicJson) {
  1105. [admobHelper umengCustomEventWithKey:key dicJsonStr:dicJson];
  1106. }
  1107. void FireBaseCustomEvent(const char * key, const char * dicJson) {
  1108. [admobHelper firebaseCustomEventWithKey:key dicJsonStr:dicJson];
  1109. }
  1110. void AppsFlyerCustomEvent(const char * key, const char * dicJson) {
  1111. [admobHelper appsFlyerCustomEventWithKey:key dicJsonStr:dicJson];
  1112. }
  1113. void FacebookCustomEvent(const char * key, const char * dicJson) {
  1114. [admobHelper facebookCustomEventWithKey:key dicJsonStr:dicJson];
  1115. }
  1116. void FacebookCustomEventSum(const char * key, double valueToSum, const char * dicJson) {
  1117. [admobHelper facebookCustomEventWithKey:key valueToSum:valueToSum dicJsonStr:dicJson];
  1118. }
  1119. void SetUserLevelId(int level) {
  1120. [admobHelper setUserLevelId:level];
  1121. }
  1122. void buyProduct(double price, const char * skuId){
  1123. [admobHelper payWithCash:price isTest:false productID:skuId];
  1124. }
  1125. // void buyProduct(double price, bool isTest){
  1126. // [admobHelper payWithCash:price isTest:isTest];
  1127. // }
  1128. void Pay(double cash, int source, double coin) {
  1129. [admobHelper payWithCash:cash source:source coin:coin];
  1130. }
  1131. void PayItem(double cash, int source, const char * itemName, int amount, double price) {
  1132. [admobHelper payWithCash:cash source:source item:itemName amount:amount price:price];
  1133. }
  1134. void Buy(const char * itemName, int amount, double price) {
  1135. [admobHelper buyWithItem:itemName amount:amount price:price];
  1136. }
  1137. void Use(const char * itemName, int amount, double price) {
  1138. [admobHelper useWithItem:itemName amount:amount price:price];
  1139. }
  1140. void StartLevel(const char * levelName) {
  1141. [admobHelper startLevel:levelName];
  1142. }
  1143. void FinishLevel(const char * levelName) {
  1144. [admobHelper finishLevel:levelName];
  1145. }
  1146. void FailLevel(const char * levelName) {
  1147. [admobHelper failLevel:levelName];
  1148. }
  1149. void Bonus(double coin, int source) {
  1150. [admobHelper bonus:coin source:source];
  1151. }
  1152. void BonusItem(const char * itemName, int amount, double price, int source) {
  1153. [admobHelper bonus:itemName amount:amount price:price source:source];
  1154. }
  1155. //TODO:内购方法
  1156. void InitApplePaySharedSecretKey(const char * sharedSecret) {
  1157. [admobHelper initApplePayWithSharedSecretKey:sharedSecret];
  1158. }
  1159. void InternalPay(const char * productId) {
  1160. [admobHelper applePayWithProductId:productId];
  1161. }
  1162. void InternalPayActive(const char * productId, const char * activeId) {
  1163. [admobHelper applePayWithProductId:productId activeId:activeId];
  1164. }
  1165. void AppsflyerValidate(const char *skuId, const char *transactionId){
  1166. [admobHelper appsflyerValidateWithSkuId:skuId transactionIdentifier:transactionId];
  1167. }
  1168. void Restore() {
  1169. [admobHelper restore];
  1170. }
  1171. void querySkuDetail(const char * prdIdsStr) {
  1172. [admobHelper getProductsInfoWithProductIds:prdIdsStr];
  1173. }
  1174. void queryPurchases() {
  1175. [admobHelper checkNoFinishTransaction];
  1176. }
  1177. void FinshOneTransaction(const char * transactionId) {
  1178. [admobHelper finshOneTransaction:transactionId];
  1179. }
  1180. //TODO:本地推送
  1181. void SetLocalNotification(int identifier, const char *title, const char *body, int seconds) {
  1182. [admobHelper setLocalNoticeWithID:identifier titleStr:title bodyStr:body delayInSeconds:seconds];
  1183. }
  1184. void CancleLocalNotification(int identifier) {
  1185. [admobHelper cancleLocalNotificationWithID:identifier];
  1186. }
  1187. void CancleAllLocalNotification() {
  1188. [admobHelper cancleAllLocalNotification];
  1189. }
  1190. //TODO:分享字符串
  1191. void shareText(const char *msgStr) {
  1192. [admobHelper shareTextWithMsg:msgStr];
  1193. }
  1194. //TODO:登录
  1195. //Apple登录
  1196. void LoginUseAppleSign() {
  1197. [admobHelper loginUseAppleSign];
  1198. }
  1199. //Facebook登录
  1200. void LoginUseFacebook() {
  1201. [admobHelper loginUseFacebook];
  1202. }
  1203. void FacebookLogOut() {
  1204. [admobHelper facebookLogOut];
  1205. }
  1206. //TODO:获取Umeng设备ID
  1207. const char * GetUmengDeviceID() {
  1208. return yl_cStringCopy([admobHelper getUmengDeviceID]);
  1209. }
  1210. //TODO:弹出视图
  1211. //传入链接,弹出WebView视图
  1212. void ShowWebView(const char * url){
  1213. [admobHelper showWebViewWithUrl:url];
  1214. }
  1215. //显示游戏推荐webview
  1216. void ShowGameRecommend(){
  1217. [admobHelper showGameRecommendWebView];
  1218. }
  1219. //显示游戏论坛webview 游戏ID加用户ID
  1220. void ShowGameForumUserID(const char * gameId, const char * userId){
  1221. [admobHelper showForumWebViewVCWithGameId:gameId userId:userId email:""];
  1222. }
  1223. //显示游戏论坛webview 游戏ID加email
  1224. void ShowGameForumEmail(const char * gameId, const char * email){
  1225. [admobHelper showForumWebViewVCWithGameId:gameId userId:"" email:email];
  1226. }
  1227. //去App Store中撰写评论
  1228. void GotoAppStoreWriteReview(const char *appID) {
  1229. [admobHelper gotoAppStoreWriteReviewWithAppId:appID];
  1230. }
  1231. //调起系统自带应用内评分提示框
  1232. void ShowSysReview() {
  1233. [admobHelper showSysReview];
  1234. }
  1235. //调起反馈网页,需要现调用登录接口
  1236. void ShowFeedBackHtml(const char *data) {
  1237. [admobHelper loadFeedbackViewControllerWithDataStr:data];
  1238. }
  1239. //@TODO:GameCenter
  1240. //GameCenter 登录
  1241. void GameCenterLogin(){
  1242. [admobHelper gameCenterLogin];
  1243. }
  1244. //上传默认存档
  1245. void UploadAcrive(const char *data) {
  1246. [admobHelper uploadAcrive:data];
  1247. }
  1248. //下载单个默认的存档
  1249. void DownloadOneSavedAcrive() {
  1250. [admobHelper downloadOneSavedAcrive];
  1251. }
  1252. //上传指定名称存档
  1253. void UploadAcriveHasName(const char *name, const char *data) {
  1254. [admobHelper uploadAcrive:data name:name];
  1255. }
  1256. //下载指定名称存档
  1257. void DownloadOneSavedAcriveHasName(const char *name) {
  1258. [admobHelper downloadOneSavedAcrive:name];
  1259. }
  1260. //删除指定名称存档
  1261. void DeleteOneSavedAcrive(const char *name) {
  1262. [admobHelper deleteOneSavedAcrive:name];
  1263. }
  1264. //获取该游戏所有存档数组
  1265. void DownloadAllSavedAcrive() {
  1266. [admobHelper downloadAllSavedAcrive];
  1267. }
  1268. //解决指定名称存档冲突的情况
  1269. void ResolveConflictingSavedGames(const char *name, const char *data) {
  1270. [admobHelper resolveConflictingSavedGames:data name:name];
  1271. }
  1272. // 保存高分至某一个排行榜
  1273. void SaveHighScore(const char *leaderboardId, long int score) {
  1274. [admobHelper saveHighScore:leaderboardId score:score];
  1275. }
  1276. ///显示系统排行榜 可以跳转到自定的 game 排行榜 和 跳转到那个时间段
  1277. void ShowSystomGameCenter(const char *leaderboardId, int time) {
  1278. [admobHelper ShowSystomGameCenterWithLeaderboardId:leaderboardId time:time];
  1279. }
  1280. ///获取排行榜信息 下载game center 某一排行榜中的分数及排名情况
  1281. void DownLoadHighScore(int timeType, const char *leaderboardId, int count) {
  1282. [admobHelper downLoadHighScoreWithTime:timeType leaderboardId:leaderboardId count:count];
  1283. }
  1284. void DownLoadMyHighScore(int timeType, const char *leaderboardId) {
  1285. [admobHelper downLoadHighScoreWithTime:timeType leaderboardId:leaderboardId];
  1286. }
  1287. //TODO:Api接口
  1288. //初始化接口服务器
  1289. void InitServicesIsDebug(const char * gameId, const char * gameSecret, bool isdebug) {
  1290. [admobHelper initServicesGameID:gameId gameSecret:gameSecret isDebug:isdebug];
  1291. }
  1292. //初始化接口服务器
  1293. void InitServices(const char * gameId, const char * gameSecret, const char * baseUrl) {
  1294. [admobHelper initServicesGameID:gameId gameSecret:gameSecret baseUrl:baseUrl];
  1295. }
  1296. //请求接口提交用户反馈
  1297. void FeedBackSubmit(const char * msg, const char * connect, const char * docInfo) {
  1298. [admobHelper feedBackSubmitWithMsg:msg connect:connect docInfo:docInfo];
  1299. }
  1300. //获取活动
  1301. void getActivitiesWithChannel(const char *channel, const char *language){
  1302. [admobHelper getActivitiesWithChannel:channel language:language];
  1303. }
  1304. //获取广告
  1305. void getGameAnoncementsWithChannel(const char *channel, const char *version, const char *language){
  1306. [admobHelper getGameAnoncementsWithChannel:channel version:version language:language];
  1307. }
  1308. ///渠道下单接口,根据不同渠道需要的数据不同 返回的数据结构不同,前端需要根据情况解析
  1309. void channelPayOrder(const char *channel,const char *goodsId) {
  1310. [admobHelper channelPayOrderWithChannel:channel goodsId:goodsId];
  1311. }
  1312. //void channelPay4399Notify;
  1313. //void channelPayOppoNotifyWithChannel:(const char *)channel;
  1314. void channelPayGetAppVersion(int channel){
  1315. [admobHelper channelpayGetAppVersionWithChannel:channel];
  1316. }
  1317. ///获取服务器配置 appver:如果不需要根据版本判断可以串0 lastver:每次全新获取传0
  1318. void configSync(const char *appVer, int lastVer) {
  1319. [admobHelper configSyncWithAppVer:appVer lastVer:lastVer];
  1320. }
  1321. void configServerInfo() {
  1322. [admobHelper configServerInfo];
  1323. }
  1324. ///兑换码兑换接口
  1325. void dedeemConsume(const char *redeemCode) {
  1326. [admobHelper dedeemConsumeWithRedeemCode:redeemCode];
  1327. }
  1328. ///根据渠道兑换码兑换接口
  1329. void redeemConsume(const char *redeemCode, const char *channel) {
  1330. [admobHelper redeemConsumeWithRedeemCode:redeemCode channel:channel];
  1331. }
  1332. ///根据渠道和用户ID兑换码兑换接口
  1333. void redeemUserConsume(const char *redeemCode, const char *channel, const char *clientId) {
  1334. [admobHelper redeemUserConsumeWithRedeemCode:redeemCode channel:channel clientId:clientId];
  1335. }
  1336. ///登录接口微信-游客 登录之后返回token,每次操作验证token 请求需要签名,返回数据无加密
  1337. void userLogin(const char *markId, int type, const char *name, const char *icon) {
  1338. [admobHelper userLoginWithMarkId:markId type:type name:name iconurlStr:icon];
  1339. }
  1340. ///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密
  1341. void userSync(const char *archive, int archiveVersion) {
  1342. [admobHelper userSyncWithArchive:archive archiveVersion:archiveVersion];
  1343. }
  1344. // ///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 3.文件流不加入签名 4.返回字符串编码为ascii 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密
  1345. // void userSyncStream() {
  1346. // [admobHelper ];
  1347. // }
  1348. ///心跳检测,判断当前客户端登陆是否有效 请求需要签名,返回数据无加密
  1349. void userHeartbeat() {
  1350. [admobHelper userHeartbeat];
  1351. }
  1352. ///用户下订接口,下单成功之后返回支付链接 -跳转支付页面
  1353. void userOrder(const char *goodsId) {
  1354. [admobHelper userOrderWithGoodsId:goodsId];
  1355. }
  1356. ///恢复购买,查看已完成的所有订单,以及消耗状态 请求需要签名,返回结果有加密
  1357. void userResumepurchase() {
  1358. [admobHelper userResumePurchase];
  1359. }
  1360. ///订单消耗 请求需要签名,返回结果有加密
  1361. void userConsume(const char *goodsId, const char *orderId) {
  1362. [admobHelper userConsumeWithGoodsId:goodsId orderId:orderId];
  1363. }
  1364. ///查询单个订单的状态 用来处理非消耗性商品,判断订单是否支付完成 返回结果有加密 Orderstatus - 0 未购买 1 已购买 未消耗 2 已购买 已消耗
  1365. /// @param goodsId 商品ID
  1366. /// @param orderId 订单ID
  1367. void userQueryOrder(const char *goodsId, const char *orderId) {
  1368. [admobHelper userQueryOrderWithGoodsId:goodsId orderId:orderId];
  1369. }
  1370. ///获取排行榜 用户信息
  1371. void userLeaderboard() {
  1372. [admobHelper userLeaderboard];
  1373. }
  1374. ///提交用户分数 返回用户排行榜信息,返回结果无加密
  1375. void userUploadScore(int score, const char *info, const char *rankingId) {
  1376. [admobHelper userUploadScoreWithScore:score info:info rankingId:rankingId];
  1377. }
  1378. ///获取用户自己的排名
  1379. void userGetUserRank(const char *rankingId) {
  1380. [admobHelper userGetUserRankWithRankingId:rankingId];
  1381. }
  1382. ///上报付费
  1383. void payrecordSubmit() {
  1384. [admobHelper payrecordSubmit];
  1385. }
  1386. // 校验内购票据
  1387. void overseaPayAppleValidate(const char *receipt, const char *appleOrderId, const char *sku, const char *skuType, const char *price, const char *actId){
  1388. [admobHelper overseaPayAppleValidateWithReceipt:receipt appleOrderId:appleOrderId sku:sku skuType:skuType price:price actId:actId];
  1389. }
  1390. ///提交用户关键信息,校验是否作弊
  1391. void gamekeyinfoUpload(const char *info){
  1392. [admobHelper gamekeyinfoUploadWithInfoJson:info];
  1393. }
  1394. ///获取后台配置所有的商品信息
  1395. void GetGoodsList() {
  1396. [admobHelper getAllGoods];
  1397. }
  1398. //@TODO:设备、权限
  1399. /// 获取设备IDFA
  1400. const char * GetDeviceIDFA() {
  1401. return yl_cStringCopy([admobHelper getDeviceIDFA]);
  1402. }
  1403. const char * GetDeviceIDFV() {
  1404. return yl_cStringCopy([admobHelper getDeviceIDFV]);
  1405. }
  1406. /// 获取设备UDID
  1407. const char * GetDeviceUdid() {
  1408. return yl_cStringCopy([admobHelper getDeviceUdid]);
  1409. }
  1410. /// 是否是异形屏
  1411. BOOL IsAbnormityScreen() {
  1412. return [admobHelper isAbnormityScreen];
  1413. }
  1414. /// 手机别名: 用户定义的名称
  1415. const char * GetUserPhoneName() {
  1416. return yl_cStringCopy([admobHelper getUserPhoneName]);
  1417. }
  1418. //获取网络商名称
  1419. const char * GetCarrierName() {
  1420. return yl_cStringCopy([admobHelper getCarrierName]);
  1421. }
  1422. //获取设备版本名称 例如:iPhone8,2
  1423. const char * GetDeviceVersion() {
  1424. return yl_cStringCopy([admobHelper getDeviceVersion]);
  1425. }
  1426. /// 获取设备系统版本
  1427. const char * GetDeviceSystomVersion() {
  1428. return yl_cStringCopy([admobHelper getDeviceSystomVersion]);
  1429. }
  1430. /// 获取设备信息
  1431. const char * GetDeviceInfo() {
  1432. return yl_cStringCopy([admobHelper getDeviceInfo]);
  1433. }
  1434. /// 获取设备网络状态
  1435. const char * GetCurrentNetworkState() {
  1436. return yl_cStringCopy([admobHelper getCurrentNetworkState]);
  1437. }
  1438. /// 申请/验证某个权限(异步方法,需要配合authComplateWithTypeName回调方法使用)
  1439. /// @param typeInt 类型 0:Location-定位 1:Camera-相机 2:Photos-相册 3:Contacts-通讯录 4:Reminders-提醒事项 5:Calendar-日历 6:Microphone-麦克风 7:Health-健康 8:DataNetwork-数据网络 9:MediaLibrary-媒体与Apple Music
  1440. void AuthorizeWithType(int typeInt){
  1441. [admobHelper authorizeWithType:typeInt];
  1442. }
  1443. /// 验证是否拥有某个权限
  1444. BOOL HasAuthorizeWithType(int typeInt){
  1445. return [admobHelper hasAuthorizeWithType:typeInt];
  1446. }
  1447. //@TODO:工具方法
  1448. /// 显示系统提示框,提示用户去设置对应权限
  1449. /// @param title 标题
  1450. /// @param message 消息
  1451. /// @param cancel 取消按钮名称
  1452. /// @param setting 设置按钮名称
  1453. void ShowSettingAlertView(const char* title, const char* message, const char* cancel, const char* setting) {
  1454. [admobHelper showAlertViewWithTitle:title msg:message cancel:cancel setting:setting];
  1455. }
  1456. void ShareToFacebook(const char* imagePath){
  1457. [admobHelper shareToFacebookWithUrl:"" imagePath:imagePath];
  1458. }
  1459. void UploadPhoto(const char* imagePath, const char* title){
  1460. [admobHelper shareImageToFacebookGamingWithImagePath:imagePath title:title];
  1461. }
  1462. void UploadVideo(const char* imagePath ,const char* title) {
  1463. [admobHelper shareVideoToFacebookGamingWithImagePath:imagePath title:title];
  1464. }
  1465. void OpenFriendFinderDeepLink() {
  1466. [admobHelper launchFacebookPlayerFinderDialog];
  1467. }
  1468. #if defined(__cplusplus)
  1469. }
  1470. #endif
  1471. #pragma mark - 基础函数
  1472. -(NSString *)cStrToNSString:(const char *)cStr {
  1473. if (cStr == NULL) {
  1474. return nil;
  1475. }
  1476. return [NSString stringWithCString:cStr encoding:NSUTF8StringEncoding];
  1477. }
  1478. @end