// // 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 #import #ifdef PLATFORM_IOS #import "Unity/UnityInterface.h" #endif #import #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 @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