Cocos處理
保證 jsToOc 正確,并且確保前段回呼介面正確性(能正常回呼),然后 Build
window.OctoJs = function OctoJs() {
jsToOc.currentJS.ocCallBack('110');
};
window.onGameCallBack = function onGameCallBack(type1) {
jsToOc.currentJS.ocCallBack(type1);
}
window.OctoJs2 = function OctoJs2() {
TipManager.getInstance().ShowTip('暫無廣告,請檢查網路連接是否正常!');
jsToOc.currentJS.ocCallBack('112');
};
let jsToOc = {
currentJS: null,
mymimiBuy: function (type1,currentJS) {
//type1 是呼叫反射傳出去的引數 這是呼叫靜態方法
//100,101,102 450鉆石 1000鉆石 2000鉆石
jsToOc.currentJS = currentJS;
if (cc.sys.OS_ANDROID == cc.sys.os) {
console.log("current platform is: cc.sys.OS_ANDROID");
jsb.reflection.callStaticMethod("org/cocos2dx/mili/mymimi", "buy", "(Ljava/lang/String;)V", type1);
return true;
}
},
sendJSToOc(currentJS) {
jsToOc.currentJS = currentJS;
jsb.reflection.callStaticMethod("AppController", "CsjAdRewardOpen");
},
sendJSToOc2() {
// jsToOc.currentJS = currentJS;
jsb.reflection.callStaticMethod("AppController", "CsjAdRewardOpen2");
},
sendJSToOc3() {
// jsToOc.currentJS = currentJS;
jsb.reflection.callStaticMethod("AppController", "CsjAdRewardOpen3");
},
sendJSToOc4() {
// jsToOc.currentJS = currentJS;
jsb.reflection.callStaticMethod("AppController", "CsjAdRewardOpen4");
},
};
module.exports = jsToOc;

打開 Build 目錄,在其中找到/build/jsb-link/frameworks/runtime-src/proj.ios_mac/ 專案名.xcodeproj 雙擊打開
XCODE 操作
嘗試直接打包,保證打出來的 IPA 能正常運行.
配置證書
在 Cocos 圖示的 Target 中選中 BuildSetting 欄,并輸入 Sign

修改證書為開發證書


然后打開專案中的 Ios檔案夾中的 AppController.mm 腳本 添加 Cocos 呼叫的介面

添加的代碼:
+ (void)CsjAdRewardOpen {
NSLog(@"打開激勵視頻");
//[[CsjAdReward getAdInstance] OpenAd];
}
+ (void)CsjAdRewardOpen2 {
NSLog(@"打開全屏視頻");
//[[CsjAdReward getAdInstance] OpenAd2];
}
+ (void)CsjAdRewardOpen3 {
NSLog(@"打開插屏視頻");
//[[CsjAdReward getAdInstance] OpenAd3];
}
+ (void)CsjAdRewardOpen4 {
NSLog(@"打開banner視頻");
//[[CsjAdReward getAdInstance] OpenAd4];
}
然后構建IPA,看是否正常運行,
注意:如果這里構建出的 IPA 都有問題,那就先解決存在的問題,確保無問題后,再進行下一步,
接廣告
1-下載穿山甲 SDK;
2-匯入穿山甲 SDK;
這里如果沒文字描述的話,請參照穿 穿山甲官方檔案


穿山甲配置
1-將穿山甲的 SKAdNetwork ID 添加到 info.plist 中,以保證SKAdNetwork的正確運行

添加以下代碼
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>238da6jt44.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x2jnk7ly8j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
</array>
<key>NSUserTrackingUsageDescription</key>
<string>該識別符號將用于向您投放個性化廣告</string>
Build Settings中Other Linker Flags 增加引數-ObjC、-l"c++"、 -l"c++abi" 、-l"sqlite3"、-l"z",SDK同時支持-all_load具體操作如圖
引數串列
-ObjC
-l"c++"
-l"c++abi"
-l"sqlite3"
-l"z"
-all_load

? 工程需要在TARGETS -> Build Phases中找到Link Binary With Libraries,點擊“+”,依次添加下列依賴庫
添加依賴庫
o Accelerate.framework
o AdSupport.framework
o AudioToolbox.framework
o AVFoundation.framework
o CoreGraphics.framework
o CoreImage.framework
o CoreLocation.framework
o CoreMedia.framework
o CoreMotion.framework
o CoreTelephony.framework
o CoreText.framework
o ImageIO.framework
o JavaScriptCore.framework
o MapKit.framework
o MediaPlayer.framework
o MobileCoreServices.framework
o QuartzCore.framework
o Security.framework
o StoreKit.framework
o SystemConfiguration.framework
o UIKit.framework
o WebKit.framework
o libbz2.tbd
o libc++.tbd
o libiconv.tbd
o libresolv.9.tbd
o libsqlite3.tbd
o libxml2.tbd
o libz.tbd
o libc++abi.tbd
o AppTrackingTransparency.framework

iOS本地化\國際化配置
注意 : 開發者必須在這里設定所支持的語言,否則會有語言顯示的問題.例如 : 支持中文 添加 Chinese

加入穿山甲代碼
1-從其他專案中,拿到 CsjAdReward.h 和 CsjAdReward.mm 2 個腳本
拖進當前專案中(或者直接創建也可以),具體代碼如下:
@interface CsjAdReward : UIViewController
+(CsjAdReward *) getAdInstance; //用來獲取實體的方法
-(void) OpenAd;
-(void) OpenAd2;
-(void) OpenAd3;
-(void) OpenAd4;
@end
#import "CsjAdReward.h"
#import "cocos2d.h"
#import <BUAdSDK/BURewardedVideoModel.h>
#import <BUAdSDK/BUNativeExpressRewardedVideoAd.h>
#import <BUAdSDK/BUNativeExpressFullscreenVideoAd.h>
#import <BUAdSDK/BUNativeExpressInterstitialAd.h>
#import <BUAdSDK/BUNativeExpressBannerView.h>
#import <BUAdSDK/BUNativeAd.h>
#import <BUAdSDK/BUAdSlot.h>
#import <BUAdSDK/BUMaterialMeta.h>
#import <BUAdSDK/BUNativeAdRelatedView.h>
#import <BUAdSDK/BUMaterialMeta.h>
#import "AppController.h"
#import <BUAdSDK/BUAdSDKManager.h>
#import "RootViewController.h"
#include "platform/CCApplication.h"
#include "platform/ios/CCEAGLView-ios.h"
#include "cocos/scripting/js-bindings/jswrapper/SeApi.h"
@interface CsjAdReward ()<BUNativeExpressRewardedVideoAdDelegate>
@property (nonatomic,strong) BUNativeExpressRewardedVideoAd *rewardedVideoAd;
@end
@interface CsjAdReward ()<BUNativeExpressFullscreenVideoAdDelegate>
@property (nonatomic,strong) BUNativeExpressFullscreenVideoAd *fullscreenAd;
@end
@interface CsjAdReward ()<BUNativeExpresInterstitialAdDelegate>
@property (nonatomic,strong) BUNativeExpressInterstitialAd *interstitialAd;
@end
@interface CsjAdReward ()<BUNativeExpressBannerViewDelegate>
@property (nonatomic,strong) BUNativeExpressBannerView *bannerView;
@end
@interface CsjAdReward ()<BUNativeAdDelegate>
@property (nonatomic,strong) BUNativeAd *nativeAd;
@end
static CsjAdReward *instance; //這里宣告一下靜態實體,方便javascript層呼叫
@implementation CsjAdReward
BOOL isVideoLoaded = NO;
BOOL isFullscreenLoaded = NO;
//TODO 必修改項,是否是橫屏(默認為NO 即 豎屏)
BOOL IsLandscape = NO;
int adCOUNT = 0;
//獲取實體的方法,方便javascript層呼叫
+(CsjAdReward *) getAdInstance{
return instance;
}
- (void)nativeExpressFullscreenVideoAd:(BUNativeExpressFullscreenVideoAd *)fullscreenAd didFailWithError:(NSError *_Nullable)error{
NSLog(@"aaa--error");
NSLog(@"%@", error);
}
//初始化,根著SDK檔案照做就好了
- (void) viewDidLoad {
NSLog(@"viewDidLoad");
instance=self;
BURewardedVideoModel *model=[[BURewardedVideoModel alloc]init];
model.userId=@"123";
self.rewardedVideoAd=[[BUNativeExpressRewardedVideoAd alloc] initWithSlotID:@"******" rewardedVideoModel:model];
self.rewardedVideoAd.delegate=self;
[self.rewardedVideoAd loadAdData];
self.fullscreenAd = [[BUNativeExpressFullscreenVideoAd alloc] initWithSlotID:@"*******"];
self.fullscreenAd.delegate = self;
[self.fullscreenAd loadAdData];
}
//打開激勵視頻的方法
-(void) OpenAd{
if (!isVideoLoaded||!self.rewardedVideoAd.isAdValid) {
[self.rewardedVideoAd loadAdData];
return;
}
NSLog(@"1111 value: %@" ,self.rewardedVideoAd.isAdValid?@"YES":@"NO");
[self.rewardedVideoAd showAdFromRootViewController:self];
}
- (void)nativeExpressRewardedVideoAdDidLoad:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd{
isVideoLoaded = YES;
}
- (void)nativeExpressRewardedVideoAd:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *_Nullable)error{
std::string strRet = [@"" UTF8String];
std::string jsCallStr = cocos2d::StringUtils::format("OctoJs2();", strRet.c_str());
se::Value *ret = new se::Value();
se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str(), -1, ret);
}
//視頻結束的回呼
- (void)nativeExpressRewardedVideoAdDidClose:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd{
NSLog(@"rewardedVideoAdDidClose");
std::string strRet = [@"" UTF8String];
std::string jsCallStr = cocos2d::StringUtils::format("OctoJs();", strRet.c_str());
se::Value *ret = new se::Value();
se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str(), -1, ret);
[CsjAdReward SetOrientation];
[self.rewardedVideoAd loadAdData]; //視頻結束后,再加載一次廣告資料,保證廣告的不重復
}
//打開quanping視頻的方法
-(void) OpenAd2{
NSLog(@"2222 value: %@" ,self.fullscreenAd.isAdValid?@"YES":@"NO");
if (!isFullscreenLoaded||!self.fullscreenAd.isAdValid) {
[self.fullscreenAd loadAdData];
return;
}
[self.fullscreenAd showAdFromRootViewController:self];
}
- (void)nativeExpressFullscreenVideoAdDidLoad:(BUNativeExpressFullscreenVideoAd *)fullscreenAd{
isFullscreenLoaded = YES;
}
//插屏
-(void) OpenAd3{
// if(self.interstitialAd.isAdValid){
// [self.interstitialAd showAdFromRootViewController:self];
// }
}
//banner
-(void) OpenAd4{
UIWindow *window = [[UIApplication sharedApplication].delegate window];
for (UIView *view in window.subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
// if(self.fullscreenAd.isAdValid){
//[self.bannerView showAdFromRootViewController:self];
// }
}
//視頻結束的回呼
- (void)nativeExpressFullscreenVideoAdDidClose:(BUNativeExpressFullscreenVideoAd *)fullscreenAd{
NSLog(@"fullscreenVideoAdDidClose");
[CsjAdReward SetOrientation];
[self.fullscreenAd loadAdData]; //視頻結束后,再加載一次廣告資料,保證廣告的不重復
}
//設定螢屏方向
+(void)SetOrientation{
if(IsLandscape==NO)return;
// NSLog(@"Dxy-設定螢屏方向");
//TODO 橫屏的話,跟據游戲情況調整橫屏方向,Left是Home鍵在右邊,Right是Home在左邊
NSNumber *orientationTarget = [NSNumber numberWithInt:UIDeviceOrientationLandscapeLeft];
// NSNumber *orientationTarget = [NSNumber numberWithInt:UIDeviceOrientationLandscapeRight];
[[UIDevice currentDevice] setValue:orientationTarget forKey:@"orientation"];
// NSLog(@"Dxy-旋轉后螢屏的方向是:%li", (long)orientationTarget);
}
@end
2-修改全屏和激勵視頻的引數

3-在 CsjReward.mm 中確認游戲橫豎屏

4-接入開屏等穿山甲代碼
匯入穿山甲庫
#import <BUAdSDK/BUAdSDKManager.h>
#import <BUAdSDK/BUSplashAdView.h>
#import "CsjAdReward.h"
#include "cocos/scripting/js-bindings/jswrapper/SeApi.h"
#import <StoreKit/StoreKit.h>
參考穿山甲開屏相關代碼
@interface AppController () <BUSplashAdDelegate>
//xxxxxxxxx 是你自己的類名
@end
BUSplashAdView *splashView;
在 didFinishLaunchingWithOptions 方法中加入以下代碼,并修改引數
[[UIApplication sharedApplication] setStatusBarHidden:YES];
//...
[BUAdSDKManager setAppID:@"*******"];
[BUAdSDKManager setIsPaidApp:NO];
[BUAdSDKManager setLoglevel:BUAdSDKLogLevelDebug];
CGRect frame = [UIScreen mainScreen].bounds;
splashView = [[BUSplashAdView alloc] initWithSlotID:@"******" frame:frame];
splashView.delegate = self;
[splashView loadAdData];
UIViewController *_csjAdReward= [[CsjAdReward alloc] init];
[_viewController.view addSubview:_csjAdReward.view];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(statusBarOrientationChanged:)
name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
//...
//run the cocos2d-x game scene
app->start();
return YES;

再添加并覆寫以下介面
- (void)splashAdDidLoad:(BUSplashAdView *)splashAd{
UIWindow *keyWindow = [UIApplication sharedApplication].windows.firstObject;
[keyWindow.rootViewController.view addSubview:splashView];
splashView.rootViewController = keyWindow.rootViewController;
}
- (void)splashAdDidClose:(BUSplashAdView *)splashAd {
[splashAd removeFromSuperview];
}
- (void)splashAd:(BUSplashAdView *)splashAd didFailWithError:(NSError *)error{
[splashAd removeFromSuperview];
app->start();
}
+ (void)CsjAdRewardOpen {
NSLog(@"打開激勵視頻");
[[CsjAdReward getAdInstance] OpenAd];
}
+ (void)CsjAdRewardOpen2 {
NSLog(@"打開全屏視頻");
[[CsjAdReward getAdInstance] OpenAd2];
}
+ (void)CsjAdRewardOpen3 {
NSLog(@"打開插屏視頻");
[[CsjAdReward getAdInstance] OpenAd3];
}
+ (void)CsjAdRewardOpen4 {
NSLog(@"打開banner視頻");
[[CsjAdReward getAdInstance] OpenAd4];
}
此時可以嘗試構建 IPA,正常來說這里就能正常顯示一切廣告了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376036.html
標籤:其他
