CocosCreator接入FaceBookAudienceNetWork激励视频广告

先去Facebook AudienceNetwork的文档里去看下,链接https://developers.facebook.com/docs/audience-network。
使用CocosCreator构建好项目后,使用AndroidStudio打开工程,按照文档的流程下载AudienceNetWork的SDK,找到.build.gradle文件,在dependencies里添加这句,前提是你可以连接外网,不多说,他会自动下载你需要的东西,
dependencies { implementation 'com.facebook.android:audience-network-sdk:5.+' }
之后可以在AndroidManifest中配置一下,相关的东西,我说的不全,详细说明可以上文档上去详细看下,在文件的appalication里添加这些,还有什么了,暂时没想起来,文档里都有,按照配置就可以了
<uses-permission android:name="android.permission.INTERNET"/>"
接下来是奖励视频调用,包括几个部分,Cocos的安卓通信部分,和安卓java代码调用部分,安卓通信部分,主要也就一行代码
jsb.reflection.callStaticMethod( org/cocos2dx/javascript/AppActivity, 调用java的静态方法名, (Ljava/lang/String;Ljava/lang/String;)V, 参数1, 参数2 );
因为我传了两个参数,所以在cocos的js脚本中调用这个就ok了,如果觉得我说的不够详细请去cocos文档中查看,链接
https://docs.cocos.com/creator/manual/zh/advanced-topics/java-reflection.html,java原生反射机制部分。那么在安卓中调用视频看完后怎么返回呢?如下一行代码调用js脚本中的看视频完成的方法,就是把调用方法使用成字符串传了回去
this.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxJavascriptJavaBridge.evalString("adMgr.androidVideoFinish(\"" + rewardType + "\");"); } });;
(说明一点这个在android中调用一定单开一个线程调用,不然这个时候手机会直接黑屏闪退)但是调用js中的方法一定要是全局的方法,比我的例子中,adMgr作为一个全局使用,并且返回一个参数,这部分在上面的文档中都有,可以自行翻阅,接下来就是android调用广告的那一套流程了,不过就是先初始化,再进行调用的过程了,我再絮叨一遍,
初始化代码,新建一个类,里面的代码如下,其实就是初始化要在app启动前初始化,
package org.cocos2dx.javascript; import android.app.Application; import com.facebook.ads.AudienceNetworkAds; public class MyApplication extends Application{ @Override public void onCreate(){ super.onCreate(); AudienceNetworkAds.initialize(this); AudienceNetworkAds.isInAdsProcess(this); } }
别忘记了在Manifest的application中添加一定要在执行其他脚本的前面添加,这样会先调用,也就是会先初始化。

android:name="org.cocos2dx.javascript.MyApplication"

接下来就是调用部分

public static String rewardType="";
public static AppActivity Instance = null;
private static RewardedVideoAd rewardedVideoAd;

public void faceBookVideoInit(){
    rewardedVideoAd = new RewardedVideoAd(this, "2774329212600199_2799491350083985");
    Log.e("facebookInit","Init");
    if(rewardedVideoAd==null){
        Log.e("facebookInitFail","rewardedVideoIsNull");
        return;
    }else {
        Log.e("facebookInitSuccess","rewardedVideoIsNotNull");
    }
    rewardedVideoAd.setAdListener(new RewardedVideoAdListener() {
        @Override
        public void onError(Ad ad, AdError error) {
            Log.e("facebookvideoOnError", "Rewarded video ad failed to load: " + error);
            Log.e("onError","视频加载错误");       
            }
        @Override
        public void onAdLoaded(Ad ad) {
        }

        @Override
        public void onAdClicked(Ad ad) {
        }

        @Override
        public void onLoggingImpression(Ad ad) {
            
        }

        @Override
        public void onRewardedVideoCompleted() {
         Log.e("RewardedVideoCompleted","奖励视频完成");
        }

        @Override
        public void onRewardedVideoClosed() {
            rewardedVideoAd.loadAd();
            sendReward();
                   
        }
    });
    rewardedVideoAd.loadAd();
}
//发送奖励
public void sendReward(){
    this.runOnGLThread(new Runnable() {
        @Override
        public void run() {
            Cocos2dxJavascriptJavaBridge.evalString("adMgr.androidVideoFinish(\"" + rewardType + "\");");
        }
    });
}
//展示视频
public static void showAds(final String placementId,final String adsSign){
    rewardType=adsSign;
    Log.e("rewardType",rewardType);
    if(rewardedVideoAd == null || !rewardedVideoAd.isAdLoaded()) {
        Log.e("tangming2","Ads 为空或没有加载!");
        //rewardedVideoAd.loadAd();
        Instance.runOnGLThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxJavascriptJavaBridge.evalString("adMgr.finish();");
            }
        });
        return;
    }
    // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad.
    if(rewardedVideoAd.isAdInvalidated()) {
        Log.e("tangming3","Ads 初始化无效");
        //rewardedVideoAd.loadAd();
        return;
    }
    Instance.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            rewardedVideoAd.show();
        }
    });
}

接下来就是测试了,在facebook创收工具的测试下面添加安卓机的AAID,这AAID也是挺坑的我找了好久,其实就是google广告id,如果你手机后google服务,并且有facebook客户端,这个id就在google偏好设置的广告下面进去就能看到,但是有的手机是没有的哈,所以需要找一个合适的测试机,把id填入这里
在这里插入图片描述
填好后添加,然后在adroid中配置一下网络安全配置,在android的res下面新建一个xml文件夹,然后创建一个名字为network-security-config的xml文件,代码如下

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--<base-config cleartextTrafficPermitted="true"/>-->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">127.0.0.1</domain>
    </domain-config>
</network-security-config>

别忘记了在manifest中的application中引用一下这个文件,这个文件要在最前面啊,

<application
    android:networkSecurityConfig="@xml/network_security_config"
    android:name="org.cocos2dx.javascript.MyApplication"
    android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher">
    </application>

引用完就可以测试啦,如果有什么我说的不懂的地方,还是建议多去文档里看看哈。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值