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 双击打开
配置证书
在 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,看是否正常运行。
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,正常来说这里就能正常显示一切广告了。