| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811 | ////  UnityAdapter.m//  Unity-iPhone////  Created by 蒋龙 on 2019/8/27.///* 在Unity中需要调用的类中定义以下方法以便调用 //广告相关函数 [DllImport("__Internal")] private static extern void InitUnityAdSdk(string adUnitsJson, string appAppleId, string umengId);*/#import <UIKit/UIKit.h>#import <AdAdmobSDK/AdAdmobSDK.h>#ifdef PLATFORM_IOS#import "Unity/UnityInterface.h"#endif#import <Foundation/Foundation.h>#define appDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])#define BundleId [NSBundle mainBundle].bundleIdentifier#define kTabBarHeight   50#define kDeviceWidth [UIScreen mainScreen].bounds.size.width#define KDeviceHeight [UIScreen mainScreen].bounds.size.height#define isIOS7    ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending )#define isPad (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad)#define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)//判断iPHoneXr#define IS_IPHONE_Xr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)//判断iPhoneXs#define IS_IPHONE_Xs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)//判断iPhoneXs Max#define IS_IPHONE_Xs_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)// 是iPhone X 以上的机型#define IS_IPHONE_X_UP ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? YES : NO)#define jl_weakify(var)   __weak typeof(var) weakSelf = var#define jl_strongify(var) __strong typeof(var) strongSelf = var//iPhoneX系列#define Height_StatusBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 44.0 : 20.0)#define Height_NavBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 88.0 : 64.0)#define Height_TabBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 83.0 : 49.0)//固定代码#if defined(__cplusplus)extern "C"{#endif    // life cycle management    void UnityPause(int pause);    void UnitySendMessage(const char* obj, const char* method, const char* msg);#if defined(__cplusplus)}#endif#define kUnityObjectName "PottingMobile"#define kUnityObjectServicesName "PottingMobileServices"@interface AdmobSdkUnityAdapter : NSObject <AdManagerDelegate, ApplePayDelegate, LoginManagerDelegate, UnitlsManagerDelegate, YLApisManagerDelegate, GameCenterManagerDelegate, ToolsManagerDelegate>@end@implementation AdmobSdkUnityAdapter#pragma mark - 广告相关函数- (UIViewController *)getRootViewController{    UIWindow* window = nil;    if (@available(iOS 13.0, *))    {        for (UIWindowScene* windowScene in [UIApplication sharedApplication].connectedScenes)        {            if (windowScene.activationState == UISceneActivationStateForegroundActive)            {                window = windowScene.windows.firstObject;                break;            }        }    }else{        window = [UIApplication sharedApplication].keyWindow;    }    NSAssert(window, @"The window is empty");    return window.rootViewController;}-(void)isDebug:(BOOL)isdebug {    [AdManager sharedManager].isDebug = isdebug;}///开启定时自动加载广告-(void)openAutoLoadAd{    [[AdManager sharedManager] openAutoLoadAd];}// SDK中初始化方法-(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 {    NSString *adUnitsJsonStr = [self cStrToNSString:adUnitsJson];    NSString *appAppleIdStr = [self cStrToNSString:appAppleId];    NSString *umengIdStr = [self cStrToNSString:umengId];    NSString *appsFlyerKeyStr = [self cStrToNSString:appsFlyerKey];    NSString *channelStr = [self cStrToNSString:channel];    NSString *pangleAppIDStr = [self cStrToNSString:pangleAppID];//    NSLog(@"umengID:%@", umengIdStr);//    NSLog(@"appsFlyerKey:%@", appsFlyerKeyStr);        [AdManager sharedManager].delegate = self;    [[AdManager sharedManager] initAdWithAdUnitsJson:adUnitsJsonStr appAppleId:appAppleIdStr umengId:umengIdStr appsFlyerKey:appsFlyerKeyStr channel:channelStr pangleAppID:pangleAppIDStr];}-(void)setRepeatTimeWithTime:(int)time {    [AdManager sharedManager].repeatTime = @(time).integerValue;}-(void)loadAndShowBannerAdWithAdPostion:(const char *)adPostion bannerHeight:(int)bannerH {//    TopLeft,TopCenter,TopRight,Centered,BottomLeft,BottomCenter,BottomRight    if (adPostion != nil) {        float adW = 320;        float adH = 50;        if (bannerH == 50 || bannerH == 90 || bannerH == 250 || bannerH == 280) {            adH = bannerH;        }                NSString *adPostionStr = [self cStrToNSString:adPostion];        CGRect frame = CGRectZero;        if ([adPostionStr isEqualToString:@"TopLeft"]) {            frame = CGRectMake(0, Height_StatusBar, adW, adH);        }        if ([adPostionStr isEqualToString:@"TopCenter"]) {            frame = CGRectMake((kDeviceWidth-adW) / 2.0, Height_StatusBar, adW, adH);        }        if ([adPostionStr isEqualToString:@"TopRight"]) {            frame = CGRectMake(kDeviceWidth-adW, Height_StatusBar, adW, adH);        }        if ([adPostionStr isEqualToString:@"Centered"]) {            frame = CGRectMake((kDeviceWidth-adW) / 2.0, (KDeviceHeight/2.0 - adH/2.0), adW, adH);        }        if ([adPostionStr isEqualToString:@"BottomLeft"]) {            frame = CGRectMake(0, KDeviceHeight - adH, adW, adH);        }        if ([adPostionStr isEqualToString:@"BottomCenter"]) {            frame = CGRectMake((kDeviceWidth-adW) / 2.0, KDeviceHeight - adH, adW, adH);        }        if ([adPostionStr isEqualToString:@"BottomRight"]) {            frame = CGRectMake(kDeviceWidth-adW, KDeviceHeight - adH, adW, adH);        }                UIViewController *rootVC = [self getRootViewController];        [[AdManager sharedManager] loadAndShowBannerAdWithFrame:frame InView:rootVC.view];    }}-(void) consentInformationReset{    [[AdManager sharedManager] consentInformationReset];}-(void)hideBannerAd {    [[AdManager sharedManager] hiddenBannerAd];}-(void)loadInterstitialAd {    [[AdManager sharedManager] loadInterstitialAd];}-(void)showInterstitialAd {    UIViewController *rootVC = [self getRootViewController];    [[AdManager sharedManager] showInterstitialAdWithViewController:rootVC];}-(void)loadRewardedVideoAd {    [[AdManager sharedManager] loadRewardedVideoAd];}-(bool)hasRewardedVideo {    return [[AdManager sharedManager] hasRewardedVideo];}-(bool)hasRewardedVideoWithID:(const char *)idStr {    NSString *adID = [self cStrToNSString:idStr];    return [[AdManager sharedManager] hasRewardedVideoWithAdID:adID];}-(const char *)getAllRewardedVideoIdsStates {    return [self nsstringToCharWithStr:[[AdManager sharedManager] mopub_idsStatesArr]];}-(void)showRewardedVideoAd {        UIViewController *rootVC = [self getRootViewController];    [[AdManager sharedManager] showRewardedVideoAdWithViewController:rootVC];}-(void)showRewardedVideoAdWithID:(const char *)idStr {    NSString *adID = [self cStrToNSString:idStr];    UIViewController *rootVC = [self getRootViewController];    [[AdManager sharedManager] showRewardedVideoAdWithViewController:rootVC videoID:adID];}-(void)loadRewardedInterstitialAd {    [[AdManager sharedManager] loadRewardedInterstitialAd];}-(void)showRewardedInterstitialAd {    UIViewController *rootVC = [self getRootViewController];    [[AdManager sharedManager] showRewardedInterstitialAdWithViewController:rootVC];}-(void)loadAppOpenAd{    [[AdManager sharedManager] loadAppOpenAd];}-(void)showAppOpenAd{    UIViewController *rootVC = [self getRootViewController];    [[AdManager sharedManager] showAppOpenAdWithViewController:rootVC];}-(void)loadFeedbackViewControllerWithDataStr:(const char *)dataStr {    NSString *dataStrStr = [self cStrToNSString:dataStr];    [[UnitlsManager shareM] loadFeedbackViewControllerWithData:dataStrStr];}-(void)loadFeedbackViewController {    [[UnitlsManager shareM] loadFeedbackViewControllerWithData:@""];}#pragma mark - 统计相关函数- (void)customEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr {    NSString *keyStrStr = [self cStrToNSString:keyStr];    NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];    [AnalyticsManager customEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];}/// 友盟自定义统计事件/// @param keyStr 事件名称/// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""- (void)umengCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{    NSString *keyStrStr = [self cStrToNSString:keyStr];    NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];    [AnalyticsManager umengCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];}/// FireBase自定义统计事件/// @param keyStr 事件名称/// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""- (void)firebaseCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{    NSString *keyStrStr = [self cStrToNSString:keyStr];    NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];    [AnalyticsManager firebaseCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];}/// AppsFlyer自定义统计事件/// @param keyStr 事件名称/// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""- (void)appsFlyerCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{    NSString *keyStrStr = [self cStrToNSString:keyStr];    NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];    [AnalyticsManager appsFlyerCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];}/// Facebook自定义统计事件/// @param keyStr 事件名称/// @param dicJsonStr 事件参数字典JSON字符串,无参数时请传空字符串:""- (void)facebookCustomEventWithKey:(const char *)keyStr dicJsonStr:(const char *)dicJsonStr{    NSString *keyStrStr = [self cStrToNSString:keyStr];    NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];    [AnalyticsManager facebookCustomEventWithKey:keyStrStr dicJsonStr:dicJsonStrStr];}/// Facebook自定义统计事件 带需要统计总数参数的事件- (void)facebookCustomEventWithKey:(const char *)keyStr valueToSum:(double)valueS dicJsonStr:(const char *)dicJsonStr{    NSString *keyStrStr = [self cStrToNSString:keyStr];    NSString *dicJsonStrStr = [self cStrToNSString:dicJsonStr];    [AnalyticsManager facebookCustomEventWithKey:keyStrStr valueToSum:valueS dicJsonStr:dicJsonStrStr];}- (void)setUserLevelId:(int)level {//    [AnalyticsManager setUserLevelId:level];}- (void)payWithCash:(double)cash isTest:(bool)isTest productID:(const char *)productID {    NSString *productIDStr = [self cStrToNSString:productID];    [AnalyticsManager payWithCash:cash isTest:isTest productID:productIDStr];}- (void)payWithCash:(double)cash source:(int)source coin:(double)coin {    [AnalyticsManager payWithCash:cash source:source coin:coin];}- (void)payWithCash:(double)cash source:(int)source item:(const char *)item amount:(int)amount price:(double)price {    NSString *itemStr = [self cStrToNSString:item];    [AnalyticsManager payWithCash:cash source:source item:itemStr amount:amount price:price];}- (void)buyWithItem:(const char *)item amount:(int)amount price:(double)price {    NSString *itemStr = [self cStrToNSString:item];    [AnalyticsManager buyWithItem:itemStr amount:amount price:price];}- (void)useWithItem:(const char *)item amount:(int)amount price:(double)price {    NSString *itemStr = [self cStrToNSString:item];    [AnalyticsManager useWithItem:itemStr amount:amount price:price];}- (void)startLevel:(const char *)levelName {    NSString *levelNameStr = [self cStrToNSString:levelName];    [AnalyticsManager startLevel:levelNameStr];}- (void)finishLevel:(const char *)levelName {    NSString *levelNameStr = [self cStrToNSString:levelName];    [AnalyticsManager finishLevel:levelNameStr];}- (void)failLevel:(const char *)levelName {    NSString *levelNameStr = [self cStrToNSString:levelName];    [AnalyticsManager failLevel:levelNameStr];}- (void)bonus:(double)coin source:(int)source {    [AnalyticsManager bonus:coin source:source];}- (void)bonus:(const char *)item amount:(int)amount price:(double)price source:(int)source {    NSString *itemStr = [self cStrToNSString:item];    [AnalyticsManager bonus:itemStr amount:amount price:price source:source];}#pragma mark - 内购/// App 专用共享密钥 ,假如应用内有自动续期订阅则必须使用该值-(void)initApplePayWithSharedSecretKey:(const char *)sharedSecretKey{    NSString *sharedSecretKeyStr = [self cStrToNSString:sharedSecretKey];    [[ApplePayAgent shareManager] initApplePayWithSharedSecretKey:sharedSecretKeyStr];}- (void)applePayWithProductId:(const char* )productId {    NSString *productIdStr = [self cStrToNSString:productId];        [ApplePayAgent shareManager].delegate = self;        [[ApplePayAgent shareManager] payParams:productIdStr];}-(void)applePayWithProductId:(const char* )productId activeId:(const char* )activeId  {    NSString *productIdStr = [self cStrToNSString:productId];    NSString *activeIdStr = [self cStrToNSString:activeId];        [ApplePayAgent shareManager].delegate = self;    [[ApplePayAgent shareManager] payParams:productIdStr activeId:activeIdStr];}-(void)appsflyerValidateWithSkuId:(const char*)skuId transactionIdentifier:(const char*)transactionId {    NSString *skuIdStr = [self cStrToNSString:skuId];    NSString *transactionIdStr = [self cStrToNSString:transactionId];        [[ApplePayAgent shareManager] appsflyerValidateWithSkuId:skuIdStr transactionIdentifier:transactionIdStr];}-(void)restore {    [ApplePayAgent shareManager].delegate = self;        [[ApplePayAgent shareManager] restore];}-(void)getProductsInfoWithProductIds:(const char* )productIds {    NSString *productIdsStr = [self cStrToNSString:productIds];        [[ApplePayAgent shareManager] getProductsInfoWithProductsArrJsonStr:productIdsStr success:^(NSString *proInfos) {        UnitySendMessage(kUnityObjectName, "SkuDetail", [self nsstringToCharWithStr:proInfos]);    } failure:^(NSError *error) {        UnitySendMessage(kUnityObjectName, "SkuDetail", "");    }];}-(void)checkNoFinishTransaction{    [ApplePayAgent shareManager].delegate = self;    [[ApplePayAgent shareManager] checkNoFinishTransaction];}-(void)finshOneTransaction:(const char* )transactionId {    NSString *transactionIdStr = [self cStrToNSString:transactionId];    [[ApplePayAgent shareManager] finshOneTransactionWithTransactionID:transactionIdStr];}#pragma mark - 本地推送- (void)setLocalNoticeWithID:(int)identifier titleStr:(const char *)title bodyStr:(const char *)body delayInSeconds:(int)seconds{    NSString *identifierStr = @(identifier).stringValue;    NSString *titleStr = [self cStrToNSString:title];    NSString *bodyStr = [self cStrToNSString:body];        [[PushManager shareManager] setLocalNotificationWithID:identifierStr titleStr:titleStr bodyStr:bodyStr delayInSeconds:@(seconds)];}// 移除某一个指定的通知- (void)cancleLocalNotificationWithID:(int)identifier{    NSString *identifierStr =@(identifier).stringValue;    [[PushManager shareManager] cancleLocalNotificationWithID:identifierStr];}// 移除所有通知- (void)cancleAllLocalNotification{    [[PushManager shareManager] cancleAllLocalNotification];}#pragma mark - 分享-(void)shareTextWithMsg:(const char *)msg {    NSString *titleStr = [self cStrToNSString:msg];    //分享的标题    NSString *text =titleStr;    //分享的图片//  UIImage *image= [UIImage imageNamed:@"分享的图片.png"];    //分享的url//    NSURL*url = [NSURL URLWithString:@"分享的url"];    //把分项的文字, 图片, 链接放入数组    NSArray*activityItems = @[text];    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];    //不出现在活动项目//    activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];    //弹出分享的页面    [[self getRootViewController] presentViewController:activityVC animated:YES completion:nil];    // 分享后回调    activityVC.completionWithItemsHandler= ^(UIActivityType _Nullable activityType,BOOL completed,NSArray*_Nullable returnedItems,NSError*_Nullable activityError) {        if(completed) {            NSLog(@"completed");        //分享成功        }else{            NSLog(@"cancled");            //分享取消        }    };}#pragma mark - 登录-(void)loginUseAppleSign {    [[LoginManager shareM] setDelegate:self];    if (@available(iOS 13.0, *)) {        [[LoginManager shareM] loginUseAppleSign];    } else {        // Fallback on earlier versions        NSLog(@"该方法(loginUseAppleSign)仅支持iOS 13版本及以上使用");    }}-(void)loginUseFacebook {    [[LoginManager shareM] setDelegate:self];    [[LoginManager shareM] loginUseFacebook];}-(void)facebookLogOut{    //[[LoginManager shareM] logOutFacebook];    [[LoginManager shareM] setDelegate:self];    [[LoginManager shareM] revokeAuthFacebook];}#pragma mark - GameCenter-(void)gameCenterLogin{    [[GameCenterManager shareM] authPlayer];    [GameCenterManager shareM].delegate = self;}//上传最高分-(void)saveHighScore:(const char *)leaderboardId score:(long int)score {    NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];    [[GameCenterManager shareM] saveHighScoreWithLeaderboardId:leaderboardIdStr score:@(score).intValue];}///显示排行榜 可以跳转到自定的 game 排行榜 和 跳转到那个时间段- (void)ShowSystomGameCenterWithLeaderboardId:(const char *)leaderboardId time:(int)time{    NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];    [[GameCenterManager shareM] ShowSystomGameCenterWithLeaderboardId:leaderboardIdStr time:time];}///获取排行榜信息 下载game center 某一排行榜中的分数及排名情况- (void)downLoadHighScoreWithTime:(int)timeType leaderboardId:(const char *)leaderboardId count:(int)count{    NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];    [[GameCenterManager shareM] downLoadHighScoreWithTime:timeType leaderboardId:leaderboardIdStr count:count];}///获取排行榜信息 下载game center 某一排行榜中的分数及排名情况- (void)downLoadHighScoreWithTime:(int)timeType leaderboardId:(const char *)leaderboardId{    NSString *leaderboardIdStr = [self cStrToNSString:leaderboardId];    [[GameCenterManager shareM] downLoadHighScoreWithTime:timeType leaderboardId:leaderboardIdStr];}//上传存档-(void)uploadAcrive:(const char *)data name:(const char *)name {    NSString *dataStr = [self cStrToNSString:data];    NSString *nameStr = [self cStrToNSString:name];        [[GameCenterManager shareM] uploadAcriveWithDataStr:dataStr name:nameStr];}//上传默认存档-(void)uploadAcrive:(const char *)data {    NSString *dataStr = [self cStrToNSString:data];        [[GameCenterManager shareM] uploadAcriveWithDataStr:dataStr name:@"GameData"];}//下载单个默认的存档-(void)downloadOneSavedAcrive {    [[GameCenterManager shareM] loadSaveData:@"GameData"];}//下载存档数组-(void)downloadAllSavedAcrive {    [[GameCenterManager shareM] fetchAllSavedGames];}//下载单个存档-(void)downloadOneSavedAcrive:(const char *)name {    NSString *nameStr = [self cStrToNSString:name];    [[GameCenterManager shareM] loadSaveData:nameStr];}//删除单个存档-(void)deleteOneSavedAcrive:(const char *)name {    NSString *nameStr = [self cStrToNSString:name];    [[GameCenterManager shareM] deleteSavedGamesWithName:nameStr];}//解决存档冲突-(void)resolveConflictingSavedGames:(const char *)data name:(const char *)name {    NSString *dataStr = [self cStrToNSString:data];    NSString *nameStr = [self cStrToNSString:name];    [[GameCenterManager shareM] resolveConflictingSavedGames:dataStr name:nameStr];}#pragma mark - 获取设备信息和权限//获取友盟设备ID-(const char *)getUmengDeviceID {    return [self nsstringToCharWithStr:[AnalyticsManager getUmengDeviceIDForIntegration]];}/// 获取设备IDFA-(const char *)getDeviceIDFA {    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceIDFA]];}/// 获取设备IDFV-(const char *)getDeviceIDFV {    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceIDFV]];}/// 获取设备UDID-(const char *)getDeviceUdid{    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceUdid]];}/// 是否是异形屏-(BOOL)isAbnormityScreen{    return [[ToolsManager sharedM] isAbnormityScreen];}/// 手机别名: 用户定义的名称-(const char *)getUserPhoneName{    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getUserPhoneName]];}-(const char *)getCarrierName {    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getCarrierName]];}-(const char *)getDeviceVersion {    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceVersion]];}/// 获取设备系统版本-(const char *)getDeviceSystomVersion{    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getDeviceSystomVersion]];}/// 获取设备信息-(const char *)getDeviceInfo{    NSString *dicJson = [NSDictionary convertNSDictionaryToJsonString:[[ToolsManager sharedM] getDeviceInfo]];    return [self nsstringToCharWithStr:dicJson];}-(const char *)getCurrentNetworkState{    return [self nsstringToCharWithStr:[[ToolsManager sharedM] getCurrentNetworkState]];}/// 申请/验证某个权限(异步方法,需要配合authComplateWithTypeName回调方法使用)-(void)authorizeWithType:(int)typeInt{    [[ToolsManager sharedM] authorizeWithType:typeInt];}/// 验证是否拥有某个权限-(BOOL)hasAuthorizeWithType:(int)typeInt{    return [[ToolsManager sharedM] hasAuthorizeWithType:typeInt];}/// 显示系统提示框,提示用户去设置对应权限,点击设置跳转到设置页面-(void)showAlertViewWithTitle:(const char*)title msg:(const char*)message cancel:(const char*)cancel setting:(const char*)setting{    NSString *titleStr = [self cStrToNSString:title];    NSString *messageStr = [self cStrToNSString:message];    NSString *cancelStr = [self cStrToNSString:cancel];    NSString *settingStr = [self cStrToNSString:setting];        [[ToolsManager sharedM] showAlertViewWithTitle:titleStr msg:messageStr cancel:cancelStr setting:settingStr];}-(void)shareToFacebookWithUrl:(const char*)url imagePath:(const char*)imagePath {    [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] shareToFacebookWithUrl:[self cStrToNSString:url] imagePath:[self cStrToNSString:imagePath]];}-(void)shareImageToFacebookGamingWithImagePath:(const char*)imagePath title:(const char*)title{    [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] shareImageToFacebookGamingWithImagePath:[self cStrToNSString:imagePath] caption:[self cStrToNSString:title]];}-(void)shareVideoToFacebookGamingWithImagePath:(const char*)imagePath title:(const char*)title {    [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] shareVideoToFacebookGamingWithVideoPath:[self cStrToNSString:imagePath] caption:[self cStrToNSString:title]];}-(void)launchFacebookPlayerFinderDialog {    [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] launchFacebookPlayerFinderDialog];}//@TODO:FaceBook回调方法-(void)facebookShareComplete:(NSDictionary *)dic {    NSNumber *state = dic[key_states];    UnitySendMessage(kUnityObjectName, "facebookShareComplete",  [self nsstringToCharWithStr:state.stringValue]);}-(void)facebookShareUploadComplete:(NSDictionary *)dic{    NSString *msg = dic[msg];    UnitySendMessage(kUnityObjectName, "facebookUploadComplete",  [self nsstringToCharWithStr:msg]);}-(void)facebookPlayerFinderComplete:(NSDictionary *)dic{    NSString *msg = dic[msg];    UnitySendMessage(kUnityObjectName, "facebookFriendFinderResult",  [self nsstringToCharWithStr:msg]);}#pragma mark - Api接口相关函数/// 初始化网络请求所需参数-(void)initServicesGameID:(const char *)gameId gameSecret:(const char *)gameSecret isDebug:(int)isDebug {    NSString *gameIdStr = [self cStrToNSString:gameId];    NSString *gameSecretStr = [self cStrToNSString:gameSecret];    [[YLApisManager sharedManager] initSDKWithGameID:gameIdStr signStr:gameSecretStr isDebug:isDebug];    [YLApisManager sharedManager].delegate = self;    [[AdManager sharedManager] initServicesGameID:gameIdStr gameSecret:gameSecretStr isDebug:isDebug];}/// 初始化网络请求-(void)initServicesGameID:(const char *)gameId gameSecret:(const char *)gameSecret baseUrl:(const char *)baseUrl {    NSString *gameIdStr = [self cStrToNSString:gameId];    NSString *gameSecretStr = [self cStrToNSString:gameSecret];    NSString *baseUrlStr = [self cStrToNSString:baseUrl];        [[YLApisManager sharedManager] initSDKWithGameID:gameIdStr signStr:gameSecretStr baseUrl:baseUrlStr];    [YLApisManager sharedManager].delegate = self;    [[AdManager sharedManager] initServicesGameID:gameIdStr gameSecret:gameSecretStr baseUrl:baseUrlStr];}//提交反馈-(void)feedBackSubmitWithMsg:(const char *)msg connect:(const char* )connect docInfo:(const char* )docInfo {    NSString *msgStr = [self cStrToNSString:msg];    NSString *connectStr = [self cStrToNSString:connect];    NSString *docInfoStr = [self cStrToNSString:docInfo];        [[AdManager sharedManager] feedbackSubmitWithMsg:msgStr contact:connectStr documentinfo:docInfoStr];}/// 获取活动列表/// @param channel 渠道标识 0:官方包3:vivo 4:oppo 5:huawei 6:4399 7:应用宝8:xiaomi或其他在后台渠道管理页面定义的标识/// @param language 公告本地化关键词 CN-简体中文,TW-繁体中文,US-英文-(void)getActivitiesWithChannel:(const char *)channel language:(const char *)language {    NSString *channelStr = [self cStrToNSString:channel];    NSString *languageStr = [self cStrToNSString:language];        [[YLApisManager sharedManager] getActivitiesWithChannel:channelStr language:languageStr];}/// 获取广告列表/// @param channel 渠道标识 0:官方包3:vivo 4:oppo 5:huawei 6:4399 7:应用宝8:xiaomi或其他在后台渠道管理页面定义的标识/// @param version 适用的版本/// @param language 公告本地化关键词 CN-简体中文,TW-繁体中文,US-英文-(void)getGameAnoncementsWithChannel:(const char *)channel version:(const char *)version language:(const char *)language {    NSString *channelStr = [self cStrToNSString:channel];    NSString *versionStr = [self cStrToNSString:version];    NSString *languageStr = [self cStrToNSString:language];        [[YLApisManager sharedManager] getGameAnoncementsWithChannel:channelStr version:versionStr language:languageStr];}///渠道下单接口,根据不同渠道需要的数据不同 返回的数据结构不同,前端需要根据情况解析-(void)channelPayOrderWithChannel:(const char *)channel goodsId:(const char *)goodsId{    NSString *channelStr = [self cStrToNSString:channel];    NSString *goodsIdStr = [self cStrToNSString:goodsId];        [[YLApisManager sharedManager] channelPayOrderWithChannel:channelStr goodsId:goodsIdStr];}//-(void)channelPay4399Notify;//-(void)channelPayOppoNotifyWithChannel:(const char *)channel;//获取当前游戏,渠道的最新版本 返回结果无加密-(void)channelpayGetAppVersionWithChannel:(int)channel{    [[YLApisManager sharedManager] channelpayGetAppVersionWithChannel:@(channel)];}///获取服务器配置 appver:如果不需要根据版本判断可以串0 lastver:每次全新获取传0-(void)configSyncWithAppVer:(const char *)appVer lastVer:(int)lastVer {    NSString *appVerStr = [self cStrToNSString:appVer];        [[YLApisManager sharedManager] configSyncWithAppVer:appVerStr lastVer:@(lastVer)];}///获取服务器配置 appver:如果不需要根据版本判断可以串0 lastver:每次全新获取传0-(void)configServerInfo {    [[YLApisManager sharedManager] configServerinfo];}///兑换码兑换接口-(void)dedeemConsumeWithRedeemCode:(const char *)redeemCode {    NSString *redeemCodeStr = [self cStrToNSString:redeemCode];        [[YLApisManager sharedManager] dedeemConsumeWithRedeemCode:redeemCodeStr];}///根据渠道兑换码兑换接口-(void)redeemConsumeWithRedeemCode:(const char *)redeemCode channel:(const char *)channel{    NSString *redeemCodeStr = [self cStrToNSString:redeemCode];    NSString *channelStr = [self cStrToNSString:channel];        [[YLApisManager sharedManager] redeemConsumeWithRedeemCode:redeemCodeStr channel:channelStr];}/// 根据渠道和用户兑换码兑换接口/// @param channel 渠道标识 0:官方包 3:vivo 4:oppo 5:huawei 6:4399 7:应用宝 8:xiaomi 或其他在后台渠道管理页面定义的标识-(void)redeemUserConsumeWithRedeemCode:(const char *)redeemCode channel:(const char *)channel clientId:(const char *)clientId {    NSString *redeemCodeStr = [self cStrToNSString:redeemCode];    NSString *channelStr = [self cStrToNSString:channel];    NSString *clientIdStr = [self cStrToNSString:clientId];        [[YLApisManager sharedManager] redeemUserConsumeWithRedeemCode:redeemCodeStr channel:channelStr clientId:clientIdStr];}///登录接口微信-游客 登录之后返回token,每次操作验证token 请求需要签名,返回数据无加密-(void)userLoginWithMarkId:(const char *)markId type:(int)type name:(const char *)name iconurlStr:(const char *)icon {    NSString *markIdStr = [self cStrToNSString:markId];    NSString *nameStr = [self cStrToNSString:name];    NSString *iconStr = [self cStrToNSString:icon];        [[YLApisManager sharedManager] userLoginWithMarkId:markIdStr type:@(type) name:nameStr iconurlStr:iconStr];}///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密-(void)userSyncWithArchive:(const char *)archive archiveVersion:(int)archiveVersion {    NSString *archiveStr = [self cStrToNSString:archive];        [[YLApisManager sharedManager] userSyncWithArchive:archiveStr archiveVersion:@(archiveVersion)];}///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 3.文件流不加入签名 4.返回字符串编码为ascii 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密-(void)userSyncStream {    [[YLApisManager sharedManager] userSyncStream];}///心跳检测,判断当前客户端登陆是否有效 请求需要签名,返回数据无加密-(void)userHeartbeat {    [[YLApisManager sharedManager] userHeartbeat];}///用户下订接口,下单成功之后返回支付链接 -跳转支付页面-(void)userOrderWithGoodsId:(const char *)goodsId {    NSString *goodsIdStr = [self cStrToNSString:goodsId];        [[YLApisManager sharedManager] userOrderWithGoodsId:goodsIdStr];}///恢复购买,查看已完成的所有订单,以及消耗状态 请求需要签名,返回结果有加密-(void)userResumePurchase {    [[YLApisManager sharedManager] userResumePurchase];}///订单消耗 请求需要签名,返回结果有加密-(void)userConsumeWithGoodsId:(const char *)goodsId orderId:(const char *)orderId {    NSString *orderIdStr = [self cStrToNSString:orderId];    NSString *goodsIdStr = [self cStrToNSString:goodsId];        [[YLApisManager sharedManager] userConsumeWithGoodsId:goodsIdStr orderId:orderIdStr];}///查询单个订单的状态 用来处理非消耗性商品,判断订单是否支付完成 返回结果有加密 Orderstatus - 0 未购买  1 已购买 未消耗 2 已购买 已消耗/// @param goodsId 商品ID/// @param orderId 订单ID-(void)userQueryOrderWithGoodsId:(const char *)goodsId orderId:(const char *)orderId {    NSString *orderIdStr = [self cStrToNSString:orderId];    NSString *goodsIdStr = [self cStrToNSString:goodsId];        [[YLApisManager sharedManager] userQueryOrderWithGoodsId:goodsIdStr orderId:orderIdStr];}///获取排行榜 用户信息-(void)userLeaderboard {    [[YLApisManager sharedManager] userLeaderboard];}///提交用户分数 返回用户排行榜信息,返回结果无加密-(void)userUploadScoreWithScore:(int)score info:(const char *)info rankingId:(const char *)rankingId {    NSString *infoStr = [self cStrToNSString:info];    NSString *rankingIdStr = [self cStrToNSString:rankingId];        [[YLApisManager sharedManager] userUploadScoreWithScore:@(score) info:infoStr rankingId:rankingIdStr];}///获取用户自己的排名-(void)userGetUserRankWithRankingId:(const char *)rankingId {    NSString *rankingIdStr = [self cStrToNSString:rankingId];        [[YLApisManager sharedManager] userGetUserRankWithRankingId:rankingIdStr];}-(void)payrecordSubmit{    [[YLApisManager sharedManager] payrecordSubmit];}-(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 {    NSString *receiptStr = [self cStrToNSString:receipt];    NSString *appleOrderIdStr = [self cStrToNSString:appleOrderId];    NSString *skuStr = [self cStrToNSString:sku];    NSString *skuTypeStr = [self cStrToNSString:skuType];    NSString *priceStr = [self cStrToNSString:price];    NSString *actIdStr = [self cStrToNSString:actId];        [[YLApisManager sharedManager] overseaPayAppleValidateWithReceipt:receiptStr appleOrderId:appleOrderIdStr sku:skuStr skuType:skuTypeStr price:priceStr actId:actIdStr];}-(void)gamekeyinfoUploadWithInfoJson:(const char*)infoJson{    NSString *infoJsonStr = [self cStrToNSString:infoJson];    [[YLApisManager sharedManager] gamekeyinfoUploadWithInfoJson:infoJsonStr];}/// 获取后台配置的所有商品信息-(void)getAllGoods{    [[YLApisManager sharedManager] getAllGoods];}#pragma mark - 显示自带网页//弹出游戏推荐-(void)showGameRecommendWebView {    [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] loadShareWebViewVC];}-(void)ShowGameForumWebView {        [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] loadShareWebViewVC];}//根据网址传入展示网页-(void)showWebViewWithUrl:(const char *)url {    NSString *urlStr = [self cStrToNSString:url];        [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] showOneWebViewWithUrlStr:urlStr];}-(void)showForumWebViewVCWithGameId:(const char *)gameId userId:(const char *)userId email:(const char *)email{    NSString *gameIdStr = [self cStrToNSString:gameId];    NSString *userIdStr = [self cStrToNSString:userId];    NSString *emailStr = [self cStrToNSString:email];        [UnitlsManager shareM].delegate = self;    [[UnitlsManager shareM] loadForumWebViewVCWithGameId:gameIdStr userId:userIdStr email:emailStr];}#pragma mark - 工具方法/// 跳转到App Store中撰写评论和评分/// @param appID 苹果应用ID-(void)gotoAppStoreWriteReviewWithAppId:(const char *)appID {    NSString *appIDStr = [self cStrToNSString:appID];    [[UnitlsManager shareM] gotoAppStoreWriteReviewWithAppId:appIDStr];}-(void)showSysReview{    [[UnitlsManager shareM] showSysReview];}#pragma mark - 协议函数/** UnitySendMessage(<#const char *#>, <#const char *#>, <#const char *#>); *  第一个参数:是unity那边创建的场景对象名 *  第二个参数:这个对象绑定的C#脚本中的方法 *  第三个参数:是iOS这边要传给unity那边的参数 *///banner加载成功-(void)bannerDidLoadAd {    UnitySendMessage(kUnityObjectName, "bannerDidLoadAd", "");}//banner加载失败-(void)bannerDidFailToLoadWithMsg:(NSString *)errMsg {    UnitySendMessage(kUnityObjectName, "bannerDidFailToLoadWithMsg", [self nsstringToCharWithStr:errMsg]);}//banner接收到点击事件-(void)bannerDidReceiveTapEvent {    UnitySendMessage(kUnityObjectName, "bannerDidReceiveTapEvent", "");}/** interstitial加载成功 */-(void)interstitialDidLoadAd {    UnitySendMessage(kUnityObjectName, "interstitialDidLoadAd", "");}/** interstitial加载失败, 仅在手动加载单条广告且加载失败时才会调用  @param errMsg 错误msg */-(void)interstitialDidFailToLoadWithMsg:(NSString *)errMsg {    UnitySendMessage(kUnityObjectName, "interstitialDidFailToLoadWithMsg",  [self nsstringToCharWithStr:errMsg]);}/** interstitial接收到点击事件 */-(void)interstitialDidReceiveTapEvent {    UnitySendMessage(kUnityObjectName, "interstitialDidReceiveTapEvent", "");}/** interstitial已经显示 */-(void)interstitialDidAppear {    UnityPause(true);    UnitySendMessage(kUnityObjectName, "interstitialDidAppear", "");}/** interstitial已经关闭 */-(void)interstitialDidDisappear {    UnityPause(false);    UnitySendMessage(kUnityObjectName, "interstitialDidDisappear", "");}/** rewardedVideo加载成功 */-(void)rewardedVideoDidLoadAd {    UnitySendMessage(kUnityObjectName, "rewardedVideoDidLoadAd", "");}/** rewardedVideo加载失败, 仅在手动加载单条广告且加载失败时才会调用  @param errMsg 错误msg */-(void)rewardedVideoDidFailToLoadWithMsg:(NSString *)errMsg {    UnitySendMessage(kUnityObjectName, "rewardedVideoDidFailToLoadWithMsg",  [self nsstringToCharWithStr:errMsg]);}/** rewardedVideo接收到点击事件 */-(void)rewardedVideoDidReceiveTapEvent {    UnitySendMessage(kUnityObjectName, "rewardedVideoDidReceiveTapEvent", "");}/** rewardedVideo已经显示 */-(void)rewardedVideoDidAppear {    UnityPause(true);    UnitySendMessage(kUnityObjectName, "rewardedVideoDidAppear", "");}/** rewardedVideo已经关闭 */-(void)rewardedVideoDidDisappear {    UnityPause(false);    UnitySendMessage(kUnityObjectName, "rewardedVideoDidDisappear", "");    }/** rewardedVideo播放完成,应该给予奖励 */-(void)rewardedVideoAdShouldReward {    UnitySendMessage(kUnityObjectName, "rewardedVideoAdShouldReward", "");}-(void)rewardedVideoAdDidFailToPlayWithMsg:(NSString *)errMsg{    UnitySendMessage(kUnityObjectName, "rewardedVideoAdDidFailToPlayWithMsg", [self nsstringToCharWithStr:errMsg]);}-(void)rewardedVideoStatesWithJsonStr:(NSString *)jsonStr {    UnitySendMessage(kUnityObjectName, "hasRewardedVideo", [self nsstringToCharWithStr:jsonStr]);}//屏式激励视频-(void)rewardedInterstitialDidLoadAd {    UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidLoadAd", "");}-(void)rewardedInterstitialDidFailToLoadWithMsg:(NSString *)errMsg {    UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidFailToLoadWithMsg",  [self nsstringToCharWithStr:errMsg]);}-(void)rewardedInterstitialDidReceiveTapEvent {    UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidReceiveTapEvent", "");}-(void)rewardedInterstitialDidAppear {    UnityPause(true);    UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidAppear", "");}-(void)rewardedInterstitialDidDisappear {    UnityPause(false);    UnitySendMessage(kUnityObjectName, "rewardedInterstitialDidDisappear", "");}-(void)rewardedInterstitialAdShouldReward {    UnitySendMessage(kUnityObjectName, "rewardedInterstitialAdShouldReward", "");}-(void)rewardedInterstitialAdDidFailToPlayWithMsg:(NSString *)errMsg{    UnitySendMessage(kUnityObjectName, "rewardedInterstitialAdDidFailToPlayWithMsg", [self nsstringToCharWithStr:errMsg]);}//APP 开屏广告-(void)appOpenAdDidLoad{    UnitySendMessage(kUnityObjectName, "appOpenAdDidLoad", "");}-(void)appOpenAdDidFailToLoadWithMsg:(NSString *)errMsg{    UnitySendMessage(kUnityObjectName, "appOpenAdDidFailToLoad", [self nsstringToCharWithStr:errMsg]);}-(void)appOpenAdDidReceiveTapEvent{    UnitySendMessage(kUnityObjectName, "appOpenAdDidReceiveTapEvent", "");}-(void)appOpenAdDidAppear{    UnitySendMessage(kUnityObjectName, "appOpenAdDidAppear", "");}-(void)appOpenAdDidDisappear{    UnitySendMessage(kUnityObjectName, "appOpenAdDidDisappear", "");}-(void)appOpenAdShouldReward{    UnitySendMessage(kUnityObjectName, "appOpenAdShouldReward", "");}-(void)appOpenAdDidFailToPlayWithMsg:(NSString *)errMsg{    UnitySendMessage(kUnityObjectName, "appOpenAdDidFailToPlay", [self nsstringToCharWithStr:errMsg]);}/** appsFlyer归因数据回调 */-(void)appsFlyerTrackerDataWithJsonStr:(NSString *)jsonStr{    UnitySendMessage(kUnityObjectName, "ConversionData", [self nsstringToCharWithStr:jsonStr]);}/**mopub广告数据回调*/-(void)mopubAdIncomeDataWithJsonStr:(NSString *)jsonStr {    UnitySendMessage(kUnityObjectName, "ImpressionData", [self nsstringToCharWithStr:jsonStr]);}#pragma mark - 内购回调-(void)applePayHaveResultWithMsg:(NSDictionary *)msgDic{    NSNumber *codeNum = msgDic[Des_Code_Key];    NSString *msg = msgDic[Des_Msg_Key];    NSLog(@"%@", msg);    UnitySendMessage(kUnityObjectName, "internalPayResult", [self nsstringToCharWithStr:codeNum.stringValue]);        if (codeNum.intValue == 1) { //支付成功        NSLog(@"支付成功");        NSDictionary *dic = @{            Des_Code_Key:@(1),            Des_Msg_Key:msgDic[Des_Msg_Key],            @"orderId":msgDic[PayTradeIdKey],            @"packageName":@"",            @"productId":msgDic[PayproductIdKey],            @"purchaseTime":msgDic[PayPayTimeKey],            @"purchaseState":@(1),            @"purchaseToken":msgDic[PayReceiptKey]?:@"",            @"acknowledged":@(NO)        };        //支付成功后获取详细支付数据        UnitySendMessage(kUnityObjectName, "acknowledgePurchase", [self nsstringToCharWithStr:[NSDictionary convertNSDictionaryToJsonString:dic]]);    }else{ //支付失败        NSLog(@"支付失败");    }}-(void)reStoreHaveResultWithMsg:(NSDictionary *)msgDic{    NSNumber *codeNum = msgDic[Des_Code_Key];    NSString *msg = msgDic[Des_Msg_Key];    NSString *msgStr = msgDic[PayDescriptionKey];    UnitySendMessage(kUnityObjectName, "restoreResult", [self nsstringToCharWithStr:msgStr]);    if (codeNum.intValue == 1) { //支付成功        NSLog(@"恢复购买成功");    }else{ //支付失败        NSLog(@"恢复购买失败,失败原因:%@", msg);    }    }-(void)applePayHaveNoFinishTransactionWithMsg:(NSArray *)msgArr arrJson:(NSString *)arrJson{    UnitySendMessage(kUnityObjectName, "Purchase", [self nsstringToCharWithStr:arrJson]);}//支付校验成功-(void)overseaPayAppleValidateHaveResultWithMsg:(NSDictionary *)msgDic{    UnitySendMessage(kUnityObjectName, "Validate", [self nsstringToCharWithStr:[NSDictionary convertNSDictionaryToJsonString:msgDic]]);}-(void)showAlertWithTitle:(const char*)title {    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:[self cStrToNSString:title] preferredStyle:(UIAlertControllerStyleAlert)];    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {            }];    [alertVC addAction:okAction];    UIViewController *rootVC = [self getRootViewController];    [rootVC presentViewController:alertVC animated:YES completion:nil];}-(void)loginUseAppleSignDidCompleteWithDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "loginDidComplete", [self nsstringToCharWithStr:jsonStr]);}-(void)loginUseFacebookDidCompleteWithDic:(NSDictionary *)msgDic {    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "loginUseFacebookDidComplete", [self nsstringToCharWithStr:jsonStr]);}-(void)revokeAuthFacebookDicCompleteWithiDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "loginUseFacebookDidComplete", [self nsstringToCharWithStr:jsonStr]);    if[([msgDic objectForKey:@"Code"] isEqual:@(201)]){        [admobHelper loginUseFacebook];    }}#pragma mark - 接口请求回调函数-(void)feedBackSubmitComplectedWithJsonStr:(NSString *)jsonStr{    UnitySendMessage(kUnityObjectName, "feedBackSubmitComplected", [self nsstringToCharWithStr:jsonStr]);}#pragma mark - Api接口协议函数/** UnitySendMessage(<#const char *#>, <#const char *#>, <#const char *#>); *  第一个参数:是unity那边创建的场景对象名 *  第二个参数:这个对象绑定的C#脚本中的方法 *  第三个参数:是iOS这边要传给unity那边的参数 *  UnitySendMessage(kUnityObjectName, "onBannerLoaded", [self nsstringToCharWithStr:adID]); */-(void)requestSucessedWithMethodName:(NSString *)methodName jsonStr:(NSString *)jsonStr{    if ([methodName isEqualToString:Mn_overseaPayUserAppleValidate]) {        methodName = Mn_overseaPayAppleValidate;    }    UnitySendMessage(kUnityObjectServicesName, [self nsstringToCharWithStr:methodName], [self nsstringToCharWithStr:jsonStr]);}-(void)requestFailWithMethodName:(NSString *)methodName errorStr:(NSString *)errorStr{    if ([methodName isEqualToString:Mn_overseaPayUserAppleValidate]) {        methodName = Mn_overseaPayAppleValidate;    }    UnitySendMessage(kUnityObjectServicesName, [self nsstringToCharWithStr:methodName], [self nsstringToCharWithStr:errorStr]);}-(const char *)nsstringToCharWithStr:(NSString *)str {    const char *charString = "";    if ([str canBeConvertedToEncoding:NSUTF8StringEncoding]) {        charString = [str cStringUsingEncoding:NSUTF8StringEncoding];    }    return charString;}#pragma mark - 网页展示回调函数-(void)webviewDidOpen {    UnitySendMessage(kUnityObjectName, "webviewDidOpen", "");}-(void)webviewDidClose {    UnitySendMessage(kUnityObjectName, "webviewDidClose", "");}#pragma mark - GameCenter回调函数-(void)loginGameCenterDidCompleteWithDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "loginGame", [self nsstringToCharWithStr:jsonStr]);}-(void)upLoadArchiveDidCompleteWithDic:(NSDictionary *)msgDic {    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "saveGame", [self nsstringToCharWithStr:jsonStr]);}-(void)downLoadOneArchiveDidCompleteWithDic:(NSDictionary *)msgDic archiveName:(NSString *)archiveName{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "loadGame", [self nsstringToCharWithStr:jsonStr]);}-(void)downLoadArchiveDidCompleteWithDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "loadAllGame", [self nsstringToCharWithStr:jsonStr]);}-(void)deleteArchiveDidCompleteWithDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "deleteGame", [self nsstringToCharWithStr:jsonStr]);}/// 解决存档冲突回调-(void)resolveConflictingOfArchiveDidCompleteWithDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "resolveConflictGame", [self nsstringToCharWithStr:jsonStr]);}-(void)uploadHighScoreDidCompleteWithDic:(NSDictionary *)msgDic {    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "uploadHighScore", [self nsstringToCharWithStr:jsonStr]);}-(void)downLoadHighScoreDidCompleteWithDic:(NSDictionary *)msgDic{    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "downLoadHighScore", [self nsstringToCharWithStr:jsonStr]);}-(void)systomGameCenterDidClose{    UnitySendMessage(kUnityObjectName, "systomLeaderboardVcDidClose", "");}#pragma mark - 设备权限回调-(void)authComplateWithTypeName:(NSString *)typeName granted:(BOOL)granted firstTime:(BOOL)firstTime{    NSDictionary *msgDic = @{@"typeName":typeName, @"granted":@(granted), @"firstTime":@(firstTime)};    NSString *jsonStr = [NSDictionary convertNSDictionaryToJsonString:msgDic];    UnitySendMessage(kUnityObjectName, "authComplate", [self nsstringToCharWithStr:jsonStr]);}#pragma mark - C++方法#if defined(__cplusplus)extern "C"{#endif        AdmobSdkUnityAdapter *admobHelper = [[AdmobSdkUnityAdapter alloc] init];        //将char字符串进行一次copy,避免直接返回字符串给Unity时,无法正常返回值    static const char *yl_cStringCopy(const char *string) {        if (!string) {            return NULL;        }        char *res = (char *)malloc(strlen(string) + 1);        strcpy(res, string);        return res;    }        //TODO:供u3d调用的c函数    ///adUnitsJson 同firebase的json字符串    void InitUnityAdSdk(const char * adUnitsJson,const char * appAppleId,const char * umengId,const char * appsFlyerKey, const char * channel, const char * pangleAppID) {        [admobHelper initUnityAdSdkWithAdUnitsJson:adUnitsJson appAppleId:appAppleId umengId:umengId appsFlyerKey:appsFlyerKey channel:channel pangleAppID:pangleAppID];    }        void SetRepeatTime(int time){        [admobHelper setRepeatTimeWithTime:time];    }        void IsDebug(bool isDebug) {        [admobHelper isDebug:isDebug];    }        ///开启定时自动加载广告    void AutoLoadAd() {        [admobHelper openAutoLoadAd];    }        ///TODO:广告相关函数    void LoadAndShowBannerAd(const char *adPostion, int bannerHeight) {        [admobHelper loadAndShowBannerAdWithAdPostion:adPostion bannerHeight:bannerHeight];    }        void consentInformationReset(){        [admobHelper consentInformationReset];    }        void HideBannerAd() {        [admobHelper hideBannerAd];    }        void LoadInterstitialAd() {        [admobHelper loadInterstitialAd];    }        void ShowInterstitialAd() {        [admobHelper showInterstitialAd];    }        void LoadRewardedVideoAd() {        [admobHelper loadRewardedVideoAd];    }        bool HasRewardedVideo() {        return [admobHelper hasRewardedVideo];    }        bool hasRewardedVideo(const char *idStr) {        return [admobHelper hasRewardedVideoWithID:idStr];    }        const char * GetAllRewardedVideoIdsStates(){        return yl_cStringCopy([admobHelper getAllRewardedVideoIdsStates]);    }        void ShowRewardedVideoAd() {        [admobHelper showRewardedVideoAd];    }        void showRewardedVideoAd(const char *idStr) {        [admobHelper showRewardedVideoAd];    }        void LoadRewardedInterstitialAd(){        [admobHelper loadRewardedInterstitialAd];    }        void ShowRewardedInterstitialAd(){        [admobHelper showRewardedInterstitialAd];    }        void LoadAppOpenAd(){        [admobHelper loadAppOpenAd];    }        void ShowAppOpenAd(){        [admobHelper showAppOpenAd];    }        void ShowOneAlertView(const char *mesStr) {        [admobHelper showAlertWithTitle:mesStr];    }        //TODO:统计相关函数    void CustomEvent(const char * key, const char * dicJson) {        [admobHelper customEventWithKey:key dicJsonStr:dicJson];    }    void UmengCustomEvent(const char * key, const char * dicJson) {        [admobHelper umengCustomEventWithKey:key dicJsonStr:dicJson];    }    void FireBaseCustomEvent(const char * key, const char * dicJson) {        [admobHelper firebaseCustomEventWithKey:key dicJsonStr:dicJson];    }    void AppsFlyerCustomEvent(const char * key, const char * dicJson) {        [admobHelper appsFlyerCustomEventWithKey:key dicJsonStr:dicJson];    }    void FacebookCustomEvent(const char * key, const char * dicJson) {        [admobHelper facebookCustomEventWithKey:key dicJsonStr:dicJson];    }    void FacebookCustomEventSum(const char * key, double valueToSum, const char * dicJson) {        [admobHelper facebookCustomEventWithKey:key valueToSum:valueToSum dicJsonStr:dicJson];    }        void SetUserLevelId(int level) {        [admobHelper setUserLevelId:level];    }        void buyProduct(double price, const char * skuId){        [admobHelper payWithCash:price isTest:false productID:skuId];    }    //    void buyProduct(double price, bool isTest){//        [admobHelper payWithCash:price isTest:isTest];//    }        void Pay(double cash, int source, double coin) {        [admobHelper payWithCash:cash source:source coin:coin];    }        void PayItem(double cash, int source, const char * itemName, int amount, double price) {        [admobHelper payWithCash:cash source:source item:itemName amount:amount price:price];    }    void Buy(const char * itemName, int amount, double price) {        [admobHelper buyWithItem:itemName amount:amount price:price];    }    void Use(const char * itemName, int amount, double price) {        [admobHelper useWithItem:itemName amount:amount price:price];    }    void StartLevel(const char * levelName) {        [admobHelper startLevel:levelName];    }    void FinishLevel(const char * levelName) {        [admobHelper finishLevel:levelName];    }    void FailLevel(const char * levelName) {        [admobHelper failLevel:levelName];    }    void Bonus(double coin, int source) {        [admobHelper bonus:coin source:source];    }        void BonusItem(const char * itemName, int amount, double price, int source) {        [admobHelper bonus:itemName amount:amount price:price source:source];    }        //TODO:内购方法    void InitApplePaySharedSecretKey(const char * sharedSecret) {        [admobHelper initApplePayWithSharedSecretKey:sharedSecret];    }        void InternalPay(const char * productId) {        [admobHelper applePayWithProductId:productId];    }        void InternalPayActive(const char * productId, const char * activeId) {        [admobHelper applePayWithProductId:productId activeId:activeId];    }        void AppsflyerValidate(const char *skuId, const char *transactionId){        [admobHelper appsflyerValidateWithSkuId:skuId transactionIdentifier:transactionId];    }        void Restore() {        [admobHelper restore];    }        void querySkuDetail(const char * prdIdsStr) {        [admobHelper getProductsInfoWithProductIds:prdIdsStr];    }        void queryPurchases() {        [admobHelper checkNoFinishTransaction];    }        void FinshOneTransaction(const char * transactionId) {        [admobHelper finshOneTransaction:transactionId];    }        //TODO:本地推送    void SetLocalNotification(int identifier, const char *title, const char *body, int seconds) {        [admobHelper setLocalNoticeWithID:identifier titleStr:title bodyStr:body delayInSeconds:seconds];    }    void CancleLocalNotification(int identifier) {        [admobHelper cancleLocalNotificationWithID:identifier];    }    void CancleAllLocalNotification() {        [admobHelper cancleAllLocalNotification];    }        //TODO:分享字符串    void shareText(const char *msgStr) {        [admobHelper shareTextWithMsg:msgStr];    }    //TODO:登录    //Apple登录    void LoginUseAppleSign() {        [admobHelper loginUseAppleSign];    }        //Facebook登录    void LoginUseFacebook() {        [admobHelper loginUseFacebook];    }        void FacebookLogOut() {        [admobHelper facebookLogOut];    }        //TODO:获取Umeng设备ID    const char * GetUmengDeviceID() {        return yl_cStringCopy([admobHelper getUmengDeviceID]);    }    //TODO:弹出视图    //传入链接,弹出WebView视图    void ShowWebView(const char * url){        [admobHelper showWebViewWithUrl:url];    }        //显示游戏推荐webview    void ShowGameRecommend(){        [admobHelper showGameRecommendWebView];    }        //显示游戏论坛webview 游戏ID加用户ID    void ShowGameForumUserID(const char * gameId, const char * userId){        [admobHelper showForumWebViewVCWithGameId:gameId userId:userId email:""];    }        //显示游戏论坛webview 游戏ID加email    void ShowGameForumEmail(const char * gameId, const char * email){        [admobHelper showForumWebViewVCWithGameId:gameId userId:"" email:email];    }        //去App Store中撰写评论    void GotoAppStoreWriteReview(const char *appID) {        [admobHelper gotoAppStoreWriteReviewWithAppId:appID];    }        //调起系统自带应用内评分提示框    void ShowSysReview() {        [admobHelper showSysReview];    }        //调起反馈网页,需要现调用登录接口    void ShowFeedBackHtml(const char *data) {        [admobHelper loadFeedbackViewControllerWithDataStr:data];    }        //@TODO:GameCenter    //GameCenter 登录    void GameCenterLogin(){        [admobHelper gameCenterLogin];    }        //上传默认存档    void UploadAcrive(const char *data) {        [admobHelper uploadAcrive:data];    }    //下载单个默认的存档    void DownloadOneSavedAcrive() {        [admobHelper downloadOneSavedAcrive];    }        //上传指定名称存档    void UploadAcriveHasName(const char *name, const char *data) {        [admobHelper uploadAcrive:data name:name];    }    //下载指定名称存档    void DownloadOneSavedAcriveHasName(const char *name) {        [admobHelper downloadOneSavedAcrive:name];    }        //删除指定名称存档    void DeleteOneSavedAcrive(const char *name) {        [admobHelper deleteOneSavedAcrive:name];    }        //获取该游戏所有存档数组    void DownloadAllSavedAcrive() {        [admobHelper downloadAllSavedAcrive];    }        //解决指定名称存档冲突的情况    void ResolveConflictingSavedGames(const char *name, const char *data) {        [admobHelper resolveConflictingSavedGames:data name:name];    }        // 保存高分至某一个排行榜    void SaveHighScore(const char *leaderboardId, long int score) {        [admobHelper saveHighScore:leaderboardId score:score];    }    ///显示系统排行榜 可以跳转到自定的 game 排行榜 和 跳转到那个时间段    void ShowSystomGameCenter(const char *leaderboardId, int time) {        [admobHelper ShowSystomGameCenterWithLeaderboardId:leaderboardId time:time];    }    ///获取排行榜信息 下载game center 某一排行榜中的分数及排名情况    void DownLoadHighScore(int timeType, const char *leaderboardId, int count) {        [admobHelper downLoadHighScoreWithTime:timeType leaderboardId:leaderboardId count:count];    }        void DownLoadMyHighScore(int timeType, const char *leaderboardId) {        [admobHelper downLoadHighScoreWithTime:timeType leaderboardId:leaderboardId];    }        //TODO:Api接口    //初始化接口服务器    void InitServicesIsDebug(const char * gameId, const char * gameSecret, bool isdebug) {        [admobHelper initServicesGameID:gameId gameSecret:gameSecret isDebug:isdebug];    }        //初始化接口服务器    void InitServices(const char * gameId, const char * gameSecret, const char * baseUrl) {        [admobHelper initServicesGameID:gameId gameSecret:gameSecret baseUrl:baseUrl];    }        //请求接口提交用户反馈    void FeedBackSubmit(const char * msg, const char * connect, const char * docInfo) {        [admobHelper feedBackSubmitWithMsg:msg connect:connect docInfo:docInfo];    }        //获取活动    void getActivitiesWithChannel(const char *channel, const char *language){        [admobHelper getActivitiesWithChannel:channel language:language];    }        //获取广告    void getGameAnoncementsWithChannel(const char *channel, const char *version, const char *language){        [admobHelper getGameAnoncementsWithChannel:channel version:version language:language];    }        ///渠道下单接口,根据不同渠道需要的数据不同 返回的数据结构不同,前端需要根据情况解析    void channelPayOrder(const char *channel,const char *goodsId) {        [admobHelper channelPayOrderWithChannel:channel goodsId:goodsId];    }    //void channelPay4399Notify;    //void channelPayOppoNotifyWithChannel:(const char *)channel;        void channelPayGetAppVersion(int channel){        [admobHelper channelpayGetAppVersionWithChannel:channel];    }    ///获取服务器配置 appver:如果不需要根据版本判断可以串0 lastver:每次全新获取传0    void configSync(const char *appVer, int lastVer) {        [admobHelper configSyncWithAppVer:appVer lastVer:lastVer];    }        void configServerInfo() {        [admobHelper configServerInfo];    }    ///兑换码兑换接口    void dedeemConsume(const char *redeemCode) {        [admobHelper dedeemConsumeWithRedeemCode:redeemCode];    }        ///根据渠道兑换码兑换接口    void redeemConsume(const char *redeemCode, const char *channel) {        [admobHelper redeemConsumeWithRedeemCode:redeemCode channel:channel];    }        ///根据渠道和用户ID兑换码兑换接口    void redeemUserConsume(const char *redeemCode, const char *channel, const char *clientId) {        [admobHelper redeemUserConsumeWithRedeemCode:redeemCode channel:channel clientId:clientId];    }    ///登录接口微信-游客 登录之后返回token,每次操作验证token 请求需要签名,返回数据无加密    void userLogin(const char *markId, int type, const char *name, const char *icon) {        [admobHelper userLoginWithMarkId:markId type:type name:name iconurlStr:icon];    }    ///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密    void userSync(const char *archive, int archiveVersion) {        [admobHelper userSyncWithArchive:archive archiveVersion:archiveVersion];    }//    ///获取(提交)存档到服务器 1.每次启动游戏优先获取存档 2.当有需要更新的存档时提交服务器 3.文件流不加入签名 4.返回字符串编码为ascii 提交存档时服务器会默认覆盖以前的存档不会做其他判断 请求需要签名,返回数据有加密//    void userSyncStream() {//        [admobHelper ];//    }    ///心跳检测,判断当前客户端登陆是否有效 请求需要签名,返回数据无加密    void userHeartbeat() {        [admobHelper userHeartbeat];    }    ///用户下订接口,下单成功之后返回支付链接 -跳转支付页面    void userOrder(const char *goodsId) {        [admobHelper userOrderWithGoodsId:goodsId];    }    ///恢复购买,查看已完成的所有订单,以及消耗状态 请求需要签名,返回结果有加密    void userResumepurchase() {        [admobHelper userResumePurchase];    }    ///订单消耗 请求需要签名,返回结果有加密    void userConsume(const char *goodsId, const char *orderId) {        [admobHelper userConsumeWithGoodsId:goodsId orderId:orderId];    }    ///查询单个订单的状态 用来处理非消耗性商品,判断订单是否支付完成 返回结果有加密 Orderstatus - 0 未购买  1 已购买 未消耗 2 已购买 已消耗    /// @param goodsId 商品ID    /// @param orderId 订单ID    void userQueryOrder(const char *goodsId, const char *orderId) {        [admobHelper userQueryOrderWithGoodsId:goodsId orderId:orderId];    }    ///获取排行榜 用户信息    void userLeaderboard() {        [admobHelper userLeaderboard];    }    ///提交用户分数 返回用户排行榜信息,返回结果无加密    void userUploadScore(int score, const char *info, const char *rankingId) {        [admobHelper userUploadScoreWithScore:score info:info rankingId:rankingId];    }    ///获取用户自己的排名    void userGetUserRank(const char *rankingId) {        [admobHelper userGetUserRankWithRankingId:rankingId];    }        ///上报付费    void payrecordSubmit() {        [admobHelper payrecordSubmit];    }    // 校验内购票据    void overseaPayAppleValidate(const char *receipt, const char *appleOrderId, const char *sku, const char *skuType, const char *price, const char *actId){        [admobHelper overseaPayAppleValidateWithReceipt:receipt appleOrderId:appleOrderId sku:sku skuType:skuType price:price actId:actId];    }        ///提交用户关键信息,校验是否作弊    void gamekeyinfoUpload(const char *info){        [admobHelper gamekeyinfoUploadWithInfoJson:info];    }    ///获取后台配置所有的商品信息    void GetGoodsList() {        [admobHelper getAllGoods];    }        //@TODO:设备、权限    /// 获取设备IDFA    const char * GetDeviceIDFA() {        return yl_cStringCopy([admobHelper getDeviceIDFA]);    }        const char * GetDeviceIDFV() {        return yl_cStringCopy([admobHelper getDeviceIDFV]);    }        /// 获取设备UDID    const char * GetDeviceUdid() {        return yl_cStringCopy([admobHelper getDeviceUdid]);    }    /// 是否是异形屏    BOOL IsAbnormityScreen() {        return [admobHelper isAbnormityScreen];    }    /// 手机别名: 用户定义的名称    const char * GetUserPhoneName() {        return yl_cStringCopy([admobHelper getUserPhoneName]);    }        //获取网络商名称    const char * GetCarrierName() {        return yl_cStringCopy([admobHelper getCarrierName]);    }        //获取设备版本名称 例如:iPhone8,2    const char * GetDeviceVersion() {        return yl_cStringCopy([admobHelper getDeviceVersion]);    }    /// 获取设备系统版本    const char * GetDeviceSystomVersion() {        return yl_cStringCopy([admobHelper getDeviceSystomVersion]);    }    /// 获取设备信息    const char * GetDeviceInfo() {        return yl_cStringCopy([admobHelper getDeviceInfo]);    }    /// 获取设备网络状态    const char * GetCurrentNetworkState() {        return yl_cStringCopy([admobHelper getCurrentNetworkState]);    }        /// 申请/验证某个权限(异步方法,需要配合authComplateWithTypeName回调方法使用)    /// @param typeInt 类型 0:Location-定位 1:Camera-相机 2:Photos-相册 3:Contacts-通讯录 4:Reminders-提醒事项 5:Calendar-日历 6:Microphone-麦克风 7:Health-健康 8:DataNetwork-数据网络 9:MediaLibrary-媒体与Apple Music    void AuthorizeWithType(int typeInt){        [admobHelper authorizeWithType:typeInt];    }    /// 验证是否拥有某个权限    BOOL HasAuthorizeWithType(int typeInt){        return [admobHelper hasAuthorizeWithType:typeInt];    }    //@TODO:工具方法    /// 显示系统提示框,提示用户去设置对应权限    /// @param title 标题    /// @param message 消息    /// @param cancel 取消按钮名称    /// @param setting 设置按钮名称    void ShowSettingAlertView(const char* title, const char* message, const char* cancel, const char* setting) {        [admobHelper showAlertViewWithTitle:title msg:message cancel:cancel setting:setting];    }        void ShareToFacebook(const char* imagePath){        [admobHelper shareToFacebookWithUrl:"" imagePath:imagePath];    }        void UploadPhoto(const char* imagePath, const char* title){        [admobHelper shareImageToFacebookGamingWithImagePath:imagePath title:title];    }        void UploadVideo(const char* imagePath ,const char* title) {        [admobHelper shareVideoToFacebookGamingWithImagePath:imagePath title:title];    }    void OpenFriendFinderDeepLink() {        [admobHelper launchFacebookPlayerFinderDialog];    }        #if defined(__cplusplus)}#endif#pragma mark - 基础函数-(NSString *)cStrToNSString:(const char *)cStr {    if (cStr == NULL) {        return nil;    }    return [NSString stringWithCString:cStr encoding:NSUTF8StringEncoding];}@end
 |