6.x 升级指南: Android

上次更新:

为使用 Chartboost Android SDKs v6.0+,此更新向导会帮助您更新游戏。

您也可以在此阅读 SDK 6.x 的独立文档。


重要更改

以下是从早期 SDK 版本 (4.x) 升级 到 6.x 时需要了解的更改:

  • SDK 初始化 API 名称和其必要参数已变更
  • 公开方法现改为静态,因此不使用实例调用,您需要直接通过类对象调用方法 (例如,您需要将 this.cb.showInterstitial(location); 替换为 Chartboost.showInterstitial(location); 并省略任何实例变量声明 (例如,删除 private Chartboost cb;)
  • onCreate() 内替换 sharedChartboost 方法 (例如,替换 this.cb = Chartboost.sharedChartboost(); 为新的初始化方法 Chartboost.startWithAppId(this,appId,appSignature);)
  • ChartboostDelegate 不再是界面,而是抽象类。这意味着您无需提前知道 (或实施) 所需的委托数据传输。
  • 如需创建委托,无需传输“null”或委托对象到 this.cb.onCreate(...)。它有自己的类方法 Chartboost.setDelegate(cb_delegate); 需要放在 Chartboost.onCreate(this); 之前 (详情见下文)。
  • this.cb.onCreate(this, appId, appSignature, this.chartBoostDelegate); 替换为 Chartboost.onCreate(this);
  • 将所有实例变量调用替换为类方法调用,例如 this.cb.cacheInsterstitial() 应改为 Chartboost.cacheInterstitial(location);
  • 所有 has<CachedObject> 的方法名称均做出修改以明确含义,例如 hasCachedInterstitial, hasCachedMoreApps, hasCachedVideo 等现已改为 hasInterstitial, hasMoreApps, hasRewardedVideo。这些是静态布林方法,需要静态字符串位置参数,如果缓存内容存在则返回“True”。
  • : 添加了新活动数据传输: onPause()onResume()
  • : setAutoCacheAds(boolean autoCacheAds). 详情见后文。
  • CBPreferences 已不复存在,请删除对其一切调用: this.cbPref = CBPreferences.getInstance(); 所有收视均使用活动。请确保您添加以下内容到您的 AndroidManifest.xml 文件:
    <activity android:name="com.chartboost.sdk.CBImpressionActivity"
     android:excludeFromRecents="true"
     android:hardwareAccelerated="true"
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
     android:configChanges="keyboardHidden|orientation|screenSize" />
  • 如果使用,用于声明是否在用户首次会话时显示的插页式广告的覆盖公共方法 shouldRequestInterstitialsInFirstSession() 需要替换为“setter”方法 Chartboost.setShouldRequestInterstitialsInFirstSession(boolean shouldRequest);
  • 可选 (最佳实践): 在 /res/values/strings.xml 中定义 appId 和 appSignature。

    <string name="appId">5147872917ba476a7e000005</string>
    <string name="appSignature">50009149c7f545672c016b30f8b504ec2123d419</string>
    

    然后传输 getResources().getString(R.string.appId) , getResources().getString(R.string.appSignature) 而非在 Chartboost.onCreate 中以字符串传输 appId 和 appSignature

 


初始化比较

以下为 4.x 初始化实例,与 6.x 初始化比较:

/* 为 Chartboost 4.x SDK 否决示例 SDK 初始化 */

 public class ChartboostSDKv4 extends Activity {
 private static final String TAG = "Chartboost";
 private Chartboost cb;
 private CBPreferences cbPrefs;

 @Override
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState);
 this.cb = Chartboost.sharedChartboost();
 this.cbPrefs = CBPreferences.getInstance();
 String appId = "";
 String appSignature = "";
 this.cb.onCreate(this, appId, appSignature, this.chartBoostDelegate);
 }
 }

 /* Chartboost 6.x SDK 示例 SDK 初始化 */
 public class ChartboostSDKv5 extends Activity {
 private static final String TAG = "Chartboost";

 @Override
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState);
// 最佳实践: 在 /res/values/strings.xml 中定义 appId 和 appSignature。
 Chartboost.startWithAppId(this, getResources().getString(R.string.appId), getResources().getString(R.string.appSignature));
 Chartboost.setLoggingLevel(Level.ALL);
 Chartboost.setDelegate(cb_delegate);
 Chartboost.onCreate(this);
 }
 }

步骤

按照以下步骤升级您的 SDK 到 6.x。完成以下步骤后,请复核“重要更改”部分以确保您已包括全部内容。

  1. 验证您的应用仍符合最低要求:
    • 至少 API 等级 9 (Android OS 2.3)
    • 要求权限: android.permission.INTERNET
    • 必须权限: android.permission.ACCESS_NETWORK_STATE
    • 可选 (建议) 权限: android.permission.WRITE_EXTERNAL_STORAGE
    • 可选 (推荐) 权限: android.permission.ACCESS_WIFI_STATE
    • 可选 (推荐) 权限: android.permission.READ_PHONE_STATE
  2. 首先从您的项目中删除所有旧的 chartboost.jar 文件。
    • 如果您项目中没有 libs 文件夹,请创建并添加 .jar 文件
    • 您也可以添加 chartboost.jar.propertiesdoc 文件夹到 libs 以便从 IDE 获取 javadocs。
  3. 验证 Google Play Services Library 为项目的相关内容。
    • Google Play 库有自己的集成指南,包括添加到 Android Manifest 和 ProGuard 的配置。
    • 您可以按照 Google 开发者网站上列出的指南
  4. 在您的 AndroidManifest.xml 文件中添加如下条目,以显示平滑过渡和视频回放:

    <activity android:name="com.chartboost.sdk.CBImpressionActivity"
                   android:excludeFromRecents="true"
                   android:hardwareAccelerated="true"
                   android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
                   android:configChanges="keyboardHidden|orientation|screenSize" />
  5. 验证已导入 Chartboost SDK 到任意使用 Chartboost 的活动:
  6. import com.chartboost.sdk.Libraries.CBLogging.Level;
    import com.chartboost.sdk.Model.CBError.CBClickError;
    import com.chartboost.sdk.Model.CBError.CBImpressionError;
    import com.chartboost.sdk.Tracking.CBAnalytics;
    import com.chartboost.sdk.CBLocation;
    import com.chartboost.sdk.CBImpressionActivity;
    import com.chartboost.sdk.Chartboost;
    import com.chartboost.sdk.ChartboostDelegate;
    
  7. 如果您在 Chartboost 展示中显示的内容可以更改方向,您需要添加属性到 AndroidManifest.xml 文件以得到平滑的视频过渡效果:

    android:configChanges="keyboardHidden|orientation|screenSize"
    
  8. 在启动器活动类中更新 Chartboost SDK 初始化以进行 Chartboost 数据传输和 API 调用。
    初始化有两种选项:

    • 您可以让 SDK 为您处理,方法是扩展 ChartboostActivity。本操作使您不必覆盖任何活动周期方法,例如 onCreate,您只需调用 Chartboost.OnCreate()跳到步骤 11
    • 您可以明确扩展应用的主活动 (继续步骤 7 到 8)。请见示例:

      public class <Your class name> extends Activity 
      
      @Override
      public void onCreate() {
       super.onCreate();
       Chartboost.startWithAppId(this, appId, appSignature);
       /* 可选: 如果您希望程序响应 Chartboost 事件,请在此提供委托对象并查看步骤 10 以获取进一步信息 */
      //Chartboost.setDelegate( cb_delegate );
       Chartboost.onCreate(this);
       } 
      }
  9. 更新您的活动的 onStart(), onPause(), onResume() ,onStop(), onDestroy()onBackPressed() 方法如下:

    @Override
    public void onStart() {
     super.onStart();
     Chartboost.onStart(this); 
    }
    
    
    @Override
    public void onResume() {
     super.onResume();
     Chartboost.onResume(this);
    }
    
    
    @Override
    public void onPause() {
     super.onPause();
     Chartboost.onPause(this);
    }
    
    
    @Override
    public void onStop() {
     super.onStop();
     Chartboost.onStop(this);
    }
    
    
    @Override
    public void onDestroy() {
     super.onDestroy();
     Chartboost.onDestroy(this);
    }
    
    
    @Override
    public void onBackPressed() {
    // 如屏上有插页式广告则关闭。
     if (Chartboost.onBackPressed())
     return;
     else
     super.onBackPressed();
    }
    
  10. 重要: 您的所有插页式广告、“更多应用”、InPlay 和视频调用均为静态。您必须传输位置字符串到每次调用,“null”不再可用。如果您不传输位置,SDK 无法抓取任何广告。您可以使用 CBLocation 界面类以获取默认位置常数列表,也可以自己定义。位置使用后会添加到您的后台,您可以进行自定义。

    • 示例广告调用:

      // 静态和视频插页式广告
      Chartboost.cacheInterstitial(CBLocation.LOCATION_DEFAULT);
      Chartboost.showInterstitial(CBLocation.LOCATION_DEFAULT);
      
      
      // 激励式视频
      Chartboost.showRewardedVideo(CBLocation.LOCATION_GAMEOVER);
      Chartboost.cacheRewardedVideo(CBLocation.LOCATION_GAMEOVER);
      
  11. 返回步骤 7,您可能注意到了 Chartboost.setDelegate(delegate): 系统不再传输“null”或委托对象到覆盖 onCreate() 以创建委托,因为它现已有自己的类。在初始化中,先调用此方法然后再调用 Chartboost.onCreate(this)

    • 需要参数为委托对象,允许您响应您所感兴趣的事件,方法是覆盖您所选择的方法。只需提供一个抽象类 ChartboostDelegate 的对象作为参数:

      private ChartboostDelegate cb_delegate = new ChartboostDelegate() {
      //覆盖您希望跟踪和控制的 Chartboost 委托数据传输
      }; 
      
    • 新方法使您无需从 ChartboostDefaultDelegate 扩展,不同于前一版本 SDK。

  12. 您可以选择让活动从 ChartboostActivity 使用 Chartboost 扩展而非从 Activity。详情请见 README.md。重要: 如果您使用此集成方法,您必须初始化 Chartboost,使用 Chartboost.startWithAppId() 然后 调用super.onCreate()。如果您不使用,则会算作例外,因为在 SDK 调用前需要先内部初始化 Chartboost.onCreate()。示例:

    public class <Your class name> extends ChartboostActivity {
        @Override
        public void onCreate() {
            Chartboost.startWithAppId(this, appId, appSignature);
            super.onCreate();
            fooBar();
        }
    }
    

安装后数据分析

如果您将在游戏中提供游戏内购买,不妨考虑集成安装后数据分析: 您可以解锁重要信息 — 收益、ARPU、保持数、等级及其他 — 以优化 UA 广告活动或生成自定义用户组群用于用户回访和分群。


年龄限制

如果您使用

didPauseClickForConfirmation()

此方法来处理年龄限制功能,该方法现已更新为:

public void didPauseClickForConfirmation(Activity activity)

深度讲解

Java API 文档随同 SDK 和示例应用提供。

请查阅 CBSample 内的代码作为示例。

如果您计划使用 Proguard,请添加如下内容到您的 proguard.cfg 文件 (另外确保您遵循 Proguard 说明用于 Google Play Services 库):

 -keep class com.chartboost.** { *; }

如有疑问,

务请与我们联系。希望您的 SDK 集成顺利,以便将精力投入到开发优质游戏中去!如果您遇到任何问题,请立即与客服团队联系,我们乐意为您效劳。