# Chartboost SDK 集成

<!--
## Chartboost SDK 有多大？

-   Android：Chartboost SDK 将使您的最终下载大小增加大约 700KB。
-   iOS 9.x+：Chartboost SDK 将为您的最终下载大小增加不到 1.5MB。
-   iOS 8.x 及以下版本：Chartboost SDK 将为您的最终通用构建下载大小增加不到 4MB。

**实际的 SDK 包下载文件可能要大得多**，因为它包含示例代码和完整的 Chartboost 框架。 编译后可以删除其中许多文件。
-->


## 我可以为多个应用使用一个应用ID和一个应用签名吗？

您不应该为多个应用程序使用相同的应用程序 ID 和签名！

-   如果有人决定屏蔽您的应用，他们也会屏蔽共享相同 ID 的任何其他应用。 对于发布商而言，这可能会影响潜在收入。
-   您的历史分析将不准确。 数据将在共享相同 ID 的应用程序之间合并。
-   在不同平台上共享相同的应用程序 ID 很可能会破坏事情并让您感到难过。

最好的做法是在您的 Chartboost 平台上创建一个[全新的应用程序](/zh/monetization/publishing/adding-your-first-app-and-campaign/)。



## 我的应用程序的包 ID 在哪里？

iTunes Connect

-   您的应用程序的 iOS 捆绑包 ID 位于应用程序信息 > 一般信息(**App Information > General Information**)下的  [iTunes Connect](https://itunesconnect.apple.com/login)  记录中。

Google Play

-   Google Play 捆绑包 ID 位于您应用的  [Google Play 商店](https://play.google.com/store)网址中。

亚马逊应用商店

-   亚马逊标准识别号 (ASIN) 可在您应用程序的亚马逊应用商店页面的“**产品详情**”部分中公开获得。



## 为什么应用音频在播放广告时不会暂停？

-   您必须在视频开始播放时暂停应用程序音频，并在视频播放完毕后取消暂停。
-   使用委托方法 willDisplayVideo 和 didDismissRewardedVideo。
-   在 willDisplayVideo 处暂停游戏并在 didDismissRewardedVideo 处取消暂停。
-   [详细了解设备标识符](/zh/advertising/tools/device-identifiers/)。



## 为什么我导入应用后，应用图标没有出现在平台中？

您的浏览器可能没有更新您的缓存或 cookie。 尝试删除浏览器缓存和 cookie。 有关说明，请单击您正在使用的浏览器：

-   [Chrome](https://support.google.com/chrome/answer/95582?hl=en)
-   [Firefox](https://support.mozilla.org/en-US/kb/how-clear-firefox-cache)
-   [Safari](https://discussions.apple.com/message/20074025#20074025)

还是行不通？  [请告诉我们！](/zh/support/contact-us/)



## 为什么我在 XCode 中收到链接器错误（linker errors）？

当您忘记将一个或多个框架链接到您的项目时，很可能会出现链接器错误。 请查看  [iOS 集成文档](/zh/monetization/integrate/ios/get-started/)中最新 SDK 所需的框架，并确保您的项目链接到所有这些框架。 如果您仍然看到链接器错误，可能是您在 XCode 项目的构建设置中缺少 -ObjC 链接器标志，需要将其添加回 Other Linker Flags 字段。



## 为什么我的 iPad 2 模拟器上的插页式广告占据了整个屏幕？

插页式广告在 iPad 2 模拟器上可能会显得很大或“放大”。 这是因为模拟器没有将true实的设备模型传回给 Chartboost。 如果您使用不同的模拟器或实际设备，您将不会遇到此行为。



## Chartboost 是否与 iOS 应用程序传输安全 (ATS) 兼容？

**是的**。 Chartboost SDK 和所有链接都与 App Transport Security 兼容。 如果您想运行链接到您公司网站的交叉推广活动，或者以其他方式将广告定向到应用商店以外的位置，请确保您使用 https，拥有有效的 SSL 证书，并遵循其他方法来确保您的 自定义 URL 链接仍然符合 ATS 标准。



## 为什么我会收到 “`cannot initialize a parameter of type ‘id’ ” 或者“parameter of incompatible type ‘id>ChartboostDelegate<‘`” 错误？

为避免此警告，您需要确保在使用 Chartboost 方法 `[Chartboost startWithAppId:@"..." appSignature:@"..." delegate:self]` 时传入的对象类 委托符合 ChartboostDelegate 协议。

检查您的 **AppDelegate.h**  文件并确保接口包含正确的委托引用：`@interface AppDelegate : UIResponder <UIApplicationDelegate, ChartboostDelegate>`

有关更详细的说明，请参阅 Apple 文档的“[符合协议](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html#//apple_ref/doc/uid/TP40011210-CH11-SW3)”部分。



## 为什么视频广告在我的 Android 应用程序中失败或显示黑屏？

您的 Android 应用的清单设置可能存在问题。 任何显示 Chartboost 广告的Activity都必须在其 Android 清单上的Activity条目中具有值 android:hardwareAccelerated="true"，否则视频可能无法正确显示。

如果您在  **Unity 之外的 Android 上进行开发**，请检查您的 Android 清单文件以确保包含以下内容。 如果没有，添加这个并重新测试：

```
 <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" />
```


您可以通过在 AndroidManifest.xml 中的顶级应用程序条目中添加 android:hardwareAccelerated='true' 来在整个应用程序中启用硬件加速，而不是为显示广告的个别Activity启用硬件加速




## 我可以使用 Android Activity而不是视图来展示广告吗？

在某些情况下，原生 Android 或 Unity Android 开发人员可能更愿意使用Activity而不是视图来显示 Chartboost 广告。 虽然Activity在使用某些游戏引擎构建的游戏中可能效果更好，但我们鼓励您同时尝试这两种方法，因为这两种方法都有利有弊。



## 有没有办法在不链接 GooglePlayServices 库的情况下构建 Chartboost Unity 集成？

如果您愿意，您还可以绕过将 Google Play 服务库包含在您的 Unity 构建中的要求。 如果您从清单中删除以下内容：

```
<meta-data android:name="com.google.android.gms.version"  
android:value="@integer/google_play_services_version"/>
```

然后系统将不再提示您运行设置对话框，并且您的应用程序应该能够照常运行。



## SDK集成有什么要求？

Chartboost 初始化调用必须**在您的应用程序启动的前几秒内**的硬启动和软启动期间进行，无论您的应用程序中有任何其他操作或用户交互。

请查看  [SDK 集成指南](/en/monetization/get-started/#sdk-integration)了解更具体的要求。



## 我正在运行哪个版本的 SDK？

您可以通过调用以下方法找到您正在运行的 SDK 版本：

-   iOS
    `NSLog(@"Using Chartboost version: %@", [Chartboost getSDKVersion]);`

-   安卓
    `public static String getSDKVersion() {return CBConstants.SDK_VERSION;}`

或者，您也可以...

-   在 SDK 下载文件的自述文件中找到版本号。
-   检查框架内嵌入的  **Chartboost.h**  文件的顶部（仅限 iOS）。
-   设置 [Charles Web Proxy](/zh/monetization/mediation/charles-web-proxy/)  以确定 SDK 版本。


## 为什么“请求发布权限”选项是灰色的？

-   另一方面，要显示 Chartboost 广告，您的申请必须首先获得发布许可。 如果“请求发布权限”(**Request publishing permissions**)选项在您的平台中显示为灰色，这意味着 SDK 集成图标仍然不是绿色，我们尚未检测到来自您的应用程序的任何初始化调用。 我们建议修订  [Chartboost SDK 集成](/en/monetization/get-started/#sdk-integration)指南。
-   您可以使用应用程序  [Charles the Web Proxy](/zh/monetization/mediation/charles-web-proxy/)  来确认我们的 SDK 的初始化。 您正在寻找的初始化调用在我们的  [Charles Page 的 Interpreting Charles Results 部分](/zh/monetization/mediation/charles-web-proxy/)有详细说明。


<!--
## 您兼容哪些编码语言？

我们支持原生 Objective-C、Java、和 Unity。
-->


## 如果我的应用程序未上线，我还能集成 SDK 吗？

是的，如果您的应用程序尚未在 App Store、Google Play Store 或 Amazon Appstore for Android 上架，您仍然可以集成 Chartboost SDK 并运行测试。 只需将您的[应用程序添加到平台](/zh/monetization/publishing/adding-your-first-app-and-campaign/)，在您的游戏上线后，按照该页面上的步骤添加您的市场 URL 或 ASIN。



## 在将我的应用程序提交到商店之前，我需要满足哪些要求？

如果您已集成 Chartboost SDK 并完成您的构建，您就可以提交到 App Store！ 但是，在执行此操作之前，我们有一些提示和建议：

-   确保您的 Chartboost 应用程序 ID 和签名正确。 一些开发者可能有多个应用程序或同一个应用程序的多个版本。 如果使用了错误的 ID，很遗憾，您将需要重新提交以解决此问题。
-   使用  [Charles](/zh/monetization/mediation/charles-web-proxy/)（或任何其他网络调试代理）确保 Chartboost SDK 在每次启动时被初始化。 我们希望每次用户启动或恢复应用程序时都会进行 api/install 调用。
-   执行最终质量检查以确保用户体验如您所愿。 例如，广告单元是否出现在适当的位置？  [测试模式](/zh/monetization/mediation/test-mode/)是用于此类测试的绝佳工具。
-   如果提交到 Apple App Store，系统可能会询问您一些有关 IDFA 使用的问题。 您可以在[此处](/zh/advertising/tools/device-identifiers/)找到有关符合 Apple IDFA 政策的 Chartboost SDK 的信息。

自 2016 年 6 月 1 日起，Apple 要求所有提交的应用程序必须支持 IPv6。



## 为什么每次我的应用程序激活时都必须初始化 Chartboost？

这是确保我们准确跟踪分析和捕获转化的最佳方式。 由于单个网络调用可能因多种原因而失败，因此明智的做法是在您的应用程序每次激活时初始化 Chartboost 以确保不会出现这种情况。



## Chartboost SDK 收集哪些信息？

请阅读我们的[条款和条件](/en/legal/terms-conditions/)以了解更多信息。



## 您的系统使用哪些设备标识符来跟踪性能？

我们对 iOS 游戏使用 IFA（广告标识符）； Google Play 游戏的 Android ID 和 Google Play 服务广告 ID。  [了解更多](/zh/advertising/tools/device-identifiers/)



## Chartboost 使用什么开源软件？

对于 iOS：[AFNetworking](https://github.com/AFNetworking/AFNetworking)

对于 Android：[Volley](https://android.googlesource.com/platform/frameworks/volley)



## 我可以使用 TestFlight 来测试我的集成吗？

是的，但是在这样做时您应该记住以下几点：

-   每次 SDK 在 TestFlight 应用程序中请求设备标识符时，iOS 广告标识符 (IDFA)  **都会不同**。 某些 Chartboost 功能 – 例如用于排除/包含的[设备列表](/zh/advertising/guide/list-builder/)  – 可能无法正常工作或按预期运行。
-   由于上述原因，包含来自 TestFlight 构建的设备数据的分析报告可能不可靠
-   请注意，这仅适用于测试，不适用于从 App Store 下载的生产版本



## 如何防止 Game Center 视图与 Chartboost 冲突？

因为 Apple 的 Game Center 视图可以覆盖 Chartboost activity，所以您可以使用 `rootView` 在单独的视图中显示插页式广告。 （SDK 版本 3.2+）例如：假设我们有一个双视图加载序列，其中一个加载视图和一个 MenuView 类型的菜单视图。 我们可以将 Chartboost `rootView` 设置为 `MenuView` 的一个实例。 之后，无论何时调用 `showInterstitial`，插页式广告都将仅针对 MenuView 视图进行预呈现。 在显示 MenuView 视图之前，不会出现插页式广告。 这样设置 `[Chartboost sharedChartboost].rootView = gameMenu;` 即可，其中 gameMenu 是一个已经初始化的 MenuView 实例。

一旦您从当前设置为 `rootView` 的视图切换出去，请务必将 `rootView` 设置为“nil”。 如果您错过了这一步，插页式广告将不会显示在您游戏的其他任何地方！ 将 `rootView` 设置为 nil 这样设置`[Chartboost sharedChartboost].rootView = nil;` 即可。

注意：

-   rootView 框架应与窗口大小相同
-   rootView 应该是视图层次结构中的第一响应者



## 如何禁用Moat？

如果您不想启用 Moat，请删除 `CHAMoatMobileAppKit.framework` 并且不要将其与您的 Xcode 项目链接。 如果您不使用 Moat，则不需要在 XCode 项目的**构建设置部分**的**其他链接器标志**属性中添加 -ObjC 条目。

