Chartboost SDK Integration

Can I use one app ID and one app signature for multiple apps? 🔗

You should not use the same app ID and signature for multiple apps!

  • If anyone decides to block your app, they would also block any other app sharing the same ID. For publishers, this could impact potential earnings.
  • Your historical analytics would be inaccurate. Data would be combined between apps sharing the same ID.
  • Sharing the same app ID across different platforms will most likely break things and make you sad.

The best practice would be to create a brand new app in your Chartboost platform.

Where is my app’s bundle ID? 🔗

iTunes Connect 🔗

Your app’s iOS bundle ID is in its iTunes Connect record under App Information > General Information.

Google Play 🔗

Google Play bundle IDs are in your app’s Google Play Store URL.

Amazon Appstore 🔗

Amazon Standard Identification Numbers (ASINs) are available publicly on your app’s Amazon Appstore page in the Product Details section.

Why doesn’t the app audio pause during an ad? 🔗

  • You must pause the app audio when a video begins playing and unpause once the video is done.
  • Use the delegate methods willDisplayVideo and didDismissRewardedVideo.
  • Pause the game at willDisplayVideo and unpause it at didDismissRewardedVideo.
  • Learn more about device identifiers.

Why doesn’t the app icon appear in the platform after I import the app? 🔗

It’s possible that your browser isn’t updating your cache or cookies. Try removing your browser cache and cookies. For instructions, click on the browser you’re using:

Still not working? Let us know!

Why am I getting linker errors in XCode? 🔗

Linker errors are likely to appear when you’ve forgotten to link one or more frameworks to your project. Please review the frameworks required by the latest SDK in the iOS integration documentation and make sure your project is linking to all of them. If you still see linker errors, it may be that you are missing the -ObjC linker flag in your XCode project’s build settings and need to add it back to the Other Linker Flags field.

Why do interstitials on my iPad 2 Simulator take up the entire screen? 🔗

Interstitials can appear large or “zoomed in” on an iPad 2 Simulator. This is because the Simulator is not passing back a real device model to Chartboost. If you use a different Simulator or an actual device, you will not experience this behavior.

Is Chartboost compatible with iOS App Transport Security (ATS)? 🔗

Yes. The Chartboost SDK and all links are compatible with App Transport Security. If you’d like to run cross-promotion campaigns that link to your company website, or otherwise have ads that direct to locations outside the app store, make sure you use https, have a valid SSL certificate, and follow other methods to ensure your custom URL links remain ATS compliant.

Why do I get cannot initialize a parameter of type ‘id’ or parameter of incompatible type ‘id>ChartboostDelegate<‘ errors? 🔗

To avoid this warning, you will need to make sure that when using the Chartboost method [Chartboost startWithAppId:@"..." appSignature:@"..." delegate:self] the class of the object you’re passing in as the delegate conforms to the ChartboostDelegate protocol.

Check your AppDelegate.h file and make sure the interface contains the proper delegate references:

@interface AppDelegate : UIResponder <UIApplicationDelegate, ChartboostDelegate>

Refer to the Conforming to Protocols section of Apple’s documentation for a more detailed explanation.

Why do video ads fail or display a black screen in my Android app? 🔗

There may be a problem with your Android app’s manifest settings. Any activities that show Chartboost ads must have the value android:hardwareAccelerated="true" in their activity entry on the Android Manifest, or the video might not display properly.

If you’re developing on Android outside of Unity, check your Android Manifest files to ensure that the following is included. If not, add this and retest:

<activity android:name="com.chartboost.sdk.CBImpressionActivity"  
android:configChanges="keyboardHidden|orientation|screenSize" />

Instead of enabling hardware acceleration for individual activities that show ads, you can apply hardware acceleration across your entire app by adding android:hardwareAccelerated=’true’ inside your top-level application entry in AndroidManifest.xml

If you’re developing on Android through Unity, and you are NOT using the official Chartboost plugin, make this call immediately after calling the startWithAppId method:

_Chartboost.setFramework(CBFramework.CBFrameworkUnity, unityVersion);

unityVersion is the value returned by Application.unityVersion . If you are still having problems, feel free to contact us. Please also tell us…

  • if the problem persists after turning on the device’s Force GPU Rendering setting under Settings > Developer Options > Force GPU Rendering.
  • the Android OS version and model of the device being affected.
  • the version of the third-party framework or engine you’re using (e.g. Unity), if applicable.
  • which version of the Chartboost SDK you’re using.
  • which mediation SDK you’re using, if applicable.

Please also include a .apk build of your game so we can test it.

Can I use Android activities instead of views to show ads? 🔗

In some cases, it may be preferable for native Android or Unity Android developers to use an activity instead of a view to display Chartboost ads. While activities may work better in games built with certain game engines, we encourage you to experiment with both, as there can be both upsides and downsides to either method.

Is there a way to build Chartboost Unity integration without linking the GooglePlayServices library? 🔗

If you wish, you can also bypass the requirement to include the Google Play Services library in your Unity build. If you remove the following from the manifest then you will no longer be prompted to run the setup dialog, and your app should be able to proceed as usual.

<meta-data android:name="" android:value="@integer/google_play_services_version"/>

What are the requirements for SDK integration? 🔗

The Chartboost initialization call must be made during hard and soft bootups within the first few seconds of your app launching, regardless of any other actions or user interaction within your app.

Please check the SDK integration guide for more specific requirements.

Which version of the SDK am I running? 🔗

You can find which version of the SDK you’re running by calling the following methods:

  • iOS
    NSLog(@"Using Chartboost version: %@", [Chartboost getSDKVersion]);
  • Android
    public static String getSDKVersion() {return CBConstants.SDK_VERSION;}

Alternatively, you can also…

  • Find the version number in the readme within the SDK download file.
  • Check the top of the Chartboost.h header embedded inside the framework (iOS only).
  • Set up Charles Web Proxy to determine the SDK version.

Why is the option “Request publishing permissions” greyed out? 🔗

  • In other to display Chartboost ads your application has to be approved with publishing permissions first. If the option “Request publishing permissions” is greyed out in your platform, this means the SDK integration icon is still not green and we haven’t detected any initialization call from your application. We advise the revision of the Chartboost SDK integration guides.
  • You can confirm the initializing of our SDK by using the application Charles the Web Proxy. The initialization call you are looking for is detailed in the Interpreting Charles Results section of our Charles Page.

Can I still integrate the SDK if my app isn’t live? 🔗

Yes, you can still integrate the Chartboost SDK and run tests if your app isn’t yet live in the App Store, Google Play Store, or Amazon Appstore for Android. Just add your app to the platform and after your game is live, follow the steps on that page to add your market URL or ASIN.

What requirements do I need to meet before I submit my app to the store? 🔗

If you’ve integrated the Chartboost SDK and finalized your build, you’re ready to submit to the App Store! Before you do this, however, here are a few tips and recommendations we have:

  • Ensure that your Chartboost App ID and Signature are correct. Some developers may have multiple Apps or multiple versions of the same App. If the wrong IDs are used, you will, unfortunately, need to resubmit to fix this.
  • Use Charles (or any other web debug proxy) to ensure the Chartboost SDK is being initialized on each bootup. We expect the api/install call to be made each time a user launches or resumes the App.
  • Perform a final QA to ensure that the user experience is as you’d like. For example, are ad units showing up in the appropriate location? Test Mode is a great tool to use for this kind of testing.
  • If submitting to the Apple App Store, you may be asked some questions regarding your use of IDFA. You can find information regarding the Chartboost SDK complying with Apple’s IDFA policy here.

As of June 1, 2016, Apple requires that all submitted apps must support IPv6.

Why do I have to initialize Chartboost every time my app becomes active? 🔗

It’s the best way to ensure that we’re accurately tracking analytics and capturing conversions. Because a single network call can fail for any number of reasons, it’s smart to insure against that by initializing Chartboost every time your app becomes active.

What information does the Chartboost SDK collect? 🔗

Please read our Terms & Conditions to learn more.

What device identifiers does your system use to track performance? 🔗

We use the IFA (Identifier for Advertising) for iOS games; Android ID and Google Play Services Advertising ID for Google Play games. Learn more about device identifiers

What open-source software does Chartboost use? 🔗

Can I use TestFlight to test my integration? 🔗

Yes, but there are a few things you should keep in mind while doing so:

  • The iOS Identifier for Advertising (IDFA) will be different every time the SDK requests the device identifier in TestFlight apps. Some Chartboost features – like device lists for exclusion/inclusion – may not work or behave as expected.
  • As a result of the aforementioned, analytics reports that include device data from TestFlight builds may not be reliable
  • Note that this only applies to testing, not production builds downloaded from the App Store

How can I prevent the Game Center view from conflicting with Chartboost? 🔗

Because Apple’s Game Center view can override Chartboost activity, you can use the rootView to show interstitials in a separate view. (SDK version 3.2+.) For example: Let’s say we have a two-view loading sequence with a loading view and a menu view of type MenuView. We can set the Chartboost rootView to an instance of MenuView. After that, the interstitial will prerender for the MenuView view only, regardless of when showInterstitial was called. No interstitials will appear until the MenuView view is displayed. It’s as simple as [Chartboost sharedChartboost].rootView = gameMenu; where gameMenu is an already initialized instance of MenuView.

Be sure to set the rootView to ‘nil’ once you switch away from the view currently set as the rootView. If you miss this step, interstitials will NOT display anywhere else in your game! Setting the rootView to nil is as easy as [Chartboost sharedChartboost].rootView = nil;.


  • The rootView frame should be the same size as the window
  • The rootView should be the first responder in the view hierarchy

How do I disable Moat? 🔗

If you do not want Moat enabled, then delete CHAMoatMobileAppKit.framework and don’t link it with your Xcode project. If you’re not using Moat, you don’t need the -ObjC entry in the Other Linker Flags property of your XCode project’s Build Settings section.