Cocos接入优量汇

By LayFz on Aug 8, 2024

Cocos 接入优量汇广告 SDK

在这个教程中,我将详细介绍如何在 Cocos 引擎中接入优量汇广告 SDK。优量汇是一款强大的广告平台,为开发者提供了丰富的广告资源和优质的广告体验。我们将分步介绍如何在 Cocos 项目中集成优量汇 SDK,包括环境配置、代码实现和测试等内容。

本教程使用的是腾讯聚合平台,聚合平台在2024-06-05作出修订,将不再维护聚合SDK

目录

  1. 前提条件
  2. 获取优量汇 SDK
  3. 集成 SDK
  4. 配置优量汇广告

前提条件

在开始之前,请确保你具备以下条件:

  • 已安装 Cocos Creator 或 Cocos2d-x。
  • 已创建一个 Cocos 项目。

注意事项:

  • 由于Android平台更新迭代非常快,开发者很容易陷入版本冲突以及兼容问题,若要使用该教程,请使用推荐的的版本配置

    • Gradle:8.0.2
    • Gradle Plugin:8.0.2
    • Android NDK: 21.3.6528147
    • Android SDK: 29
    • Cocos Creator: 2.4.13

获取优量汇 SDK

  1. 访问优量汇官网:前往 优量汇 并登录你的账户。
  2. 下载 SDK:在开发者中心找到Android SDK,下载并解压缩。 聚合SDK已不提供下载,请联系作者获取,若有备份,忽略此条消息

集成 SDK

1. 集成 Android SDK

  1. 导入 SDK 文件

    • 将下载的 Android SDK 文件(.aar.jar 文件)放入 Cocos 项目的 assets 目录下的 Plugins/Android 文件夹中。
  2. 配置 Gradle 文件

    • 打开 Cocos 项目的 proj.android-studio/app/build.gradle 文件。

    • dependencies 部分添加优量汇 SDK 的依赖:

      implementation files('libs/your_sdk_file.aar')
  3. 更新 AndroidManifest.xml

    • proj.android-studio/app/src/main/AndroidManifest.xml 中添加优量汇所需的权限和服务:

       <!--相关权限声明 : SDK不强制校验下列权限(即:无下面权限sdk也可正常工作),但建议开发者申请下面权限,尤其是READ_PHONE_STATE权限-->
       <!--READ_PHONE_STATE权限用于允许SDK获取用户标识,针对单媒体的用户,允许获取权限的,投放定向广告;不允许获取权限的用户,投放通投广告,媒体可以选择是否把用户标识数据提供给优量汇,并承担相应广告填充和eCPM单价下降损失的结果。-->
       <uses-permission android:name="android.permission.READ_PHONE_STATE" />
       <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      
       <!-- 高于Android 7的系统上,如果应用的 targetSdkVersion >= 26 ,推荐增加权限声明(SDK将通过此权限触发App安装动作)-->
       <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
      
       <!-- 高于Android 11的系统上,如果应用的 targetSdkVersion >= 30 ,推荐增加以下权限声明(SDK将通过此权限正常触发广告行为,并保证广告的正确投放。此权限需要在用户隐私文档中声明。)-->
       <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
           tools:ignore="QueryAllPackagesPermission" />
      
       <!--检测当前⽹络状态是2G、3G、4G还是WiFi-->
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
       <!--联⽹权限-->
       <uses-permission android:name="android.permission.INTERNET" />
       <!--读写存储权限-->
       <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
       <!--获取MAC地址,⽤于标识⽤户-->
       <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
       <!--定位权限,不强制要求-->
       <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

      application部分:

         <application
           android:name="org.cocos2dx.javascript.GDT.GDTApplication"
           android:allowBackup="true"
           android:label="@string/app_name"
           android:usesCleartextTraffic="true"
           tools:replace="android:allowBackup"
           android:icon="@mipmap/ic_launcher">
           <!-- Tell Cocos2dxActivity the name of our .so -->
           <meta-data android:name="android.app.lib_name"
               android:value="cocos2djs" />
      
           <activity
               android:name="org.cocos2dx.javascript.AppActivity"
               android:screenOrientation="portrait"
               android:configChanges="orientation|keyboardHidden|screenSize|screenLayout|uiMode"
               android:label="@string/app_name"
               android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
               android:launchMode="singleTask"
               android:exported="true">
               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />
      
                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
      
           <activity
               android:name="org.cocos2dx.javascript.GDT.SplashActivity"
               android:configChanges="orientation|keyboardHidden|screenSize|screenLayout|uiMode"
               android:screenOrientation="portrait" />
      
           <!-- targetSDKVersion >= 24时才需要添加这个provider。provider的authorities属性的值为${applicationId}.fileprovider,请开发者根据自己的${applicationId}来设置这个值,例如本例中applicationId为"com.qq.e.union.demo"。 -->
           <provider
               android:name="com.qq.e.comm.GDTFileProvider"
               android:authorities="${applicationId}.gdt.fileprovider"
               android:exported="false"
               android:grantUriPermissions="true">
               <meta-data
                   android:name="android.support.FILE_PROVIDER_PATHS"
                   android:resource="@xml/gdt_file_path" />
           </provider>
      
           <!-- 如果使用激励视频/全屏视频功能,需要主动在AndroidManifest.xml里面声明MobRewardVideoActivity -->
           <activity
               android:name="com.baidu.mobads.sdk.api.MobRewardVideoActivity"
               android:configChanges="screenSize|orientation|keyboardHidden"
               android:launchMode="singleTask"
               android:theme="@android:style/Theme.Translucent.NoTitleBar" />
      
           <provider
               android:name="com.baidu.mobads.sdk.api.BdFileProvider"
               android:authorities="${applicationId}.bd.provider"
               android:exported="false"
               android:grantUriPermissions="true">
               <meta-data
                   android:name="android.support.FILE_PROVIDER_PATHS"
                   android:resource="@xml/bd_file_paths" />
           </provider>
      
           <provider
               android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
               android:authorities="${applicationId}.TTFileProvider"
               android:exported="false"
               android:grantUriPermissions="true">
               <meta-data
                   android:name="android.support.FILE_PROVIDER_PATHS"
                   android:resource="@xml/tt_file_paths" />
           </provider>
      
           <provider
               android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
               android:authorities="${applicationId}.TTMultiProvider"
               android:exported="false" />
       </application>
  4. 目录结构

    将代码依次复制到自己的项目当中,并在AppConfig类中配置自己的参数

添加依赖

gradle文件依赖部分:

  implementation fileTree(dir: 'arrs', include: ['*.aar'])
  implementation 'com.qq.e.union:union:4.570.1440'
  implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  implementation 'androidx.recyclerview:recyclerview:1.0.0'
  implementation "com.google.android.material:material:1.0.0"
  implementation 'androidx.cardview:cardview:1.0.0'
  implementation 'androidx.appcompat:appcompat:1.0.0'
  implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  implementation 'com.tencent.bugly:crashreport:latest.release'
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
  releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
  implementation 'androidx.multidex:multidex:2.0.0'
  implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

在app目录下添加arrs文件夹,把聚合平台的包放进去即可

配置优量汇广告

1. 初始化 SDK

在 Cocos 项目的主脚本中,初始化优量汇 SDK:

// JavaScript 示例
onAD(sender, str) {
        console.log("显示" + str + "广告");
        if (str == "开屏") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showSplashAd", "()V");
            }
        } else if (str == "激励") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showRewardedVideoAd", "()V");
            }
        } else if (str == "插屏") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showInterstitial", "()V");
            }
        } else if (str == "信息") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showDrawAd", "()V");
            }
        } else if (str == "横幅") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showBanner", "()V");
            }
        } else if (str == "关闭信息") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "hideDrawAd", "()V");
            }
        } else if (str == "关闭横幅") {
            if (cc.sys.platform == cc.sys.ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "hideBanner", "()V");
            }
        }
    }

在你需要的地方直接调取就可以实现弹出广告了,以上就是cocos脚本在需要的地方调用方法就可以实现安卓平台的广告调用。

评论

订阅我的博客

通过RSS订阅获取最新文章更新,不错过任何一篇技术分享

推荐使用 FeedlyInoreader 等RSS阅读器订阅