1. How can I know if the SDK initialization is completed?
There are two ways to initialize the SDK, and both will show log message if the initialization is successfully completed: AdTiming SDK init success. You can choose the second way to do your post-initialization completion processing in the callback.
- No return value: + (void)initWithAppKey:(NSString*)appKey
- With return value: + (void)initWithAppKey:(NSString*)appKey completionHandler:(initCompletionHandler) completionHandler
2. My app loads ads correctly, but why was my ads loading callback not triggered?
Check if your app
- correctly set up delegate
- used the right callback method matching the SDK version
3. Why does my app only display ads from Adtiming, but none from the other mediated AdNetworks?
- Check on your publisher web console if you have correctly set up for the AdNetworks
- Check in your project if the AdNetworks SDKs are present
- Check if the SDK initialization was successful
4. App Runtime error: +[NSString ADTDataPath]: unrecognized selector sent to class
Check your project's Building settings and make sure Other Linker Flag includes -ObjC.
5. App Runtime error: The Google Mobile Ads SDK was initialized incorrectly.
Check your Info.plist and make sure GADApplicationIdentifier settings is present.
6. The AdTiming SDK was initialized successfully, but it shows "Invalid placmentID, please try again with correct placementId" error in the Xcode log.
Check your placement type setting and make sure AppName and Type is aligned.
7. Tapjoy ads not filled correctly.
Make sure to include TapjoyResources.bundle in your Bundle Resources at Build Phases.
8. Why is it always no filling when we test Banner ads?
Currently, only AdTiming, AdMob, Facebook and MoPub support banner ads. If you test a banner ad with an AdNetwork other than these four, such as AppLovin, you will get no fill returned.
9. Does Native Ad support custom click controls?
The click event for the current version of Native Ad is associated with the whole ad container. Therefore custom clicks are not currently supported, which means you cannot specify which parts within the Ad are clickable or not.
10. Why is the number of impressions in the report more than the number of ad requests?
It is because of the timezone difference. The number of requests is the count the AdTiming SDK recorded when the ad request was made, in UTC+08 time. The number of impressions is gathered from other AdNetworks through API, usually in UTC time. The eight-hour difference resulted in the disparity.
11. Do I need to use the AdTiming Unity Plugin in my Unity-powered game app project if I mediate AdTiming through Admob/MoPub?
No, you only need to make the corresponding settings in Admob/MoPub, and add the AdTiming SDK to your project in the integration process.
12. Apple prohibits the use of UIWebView components. Are this kind of component being used in your SDK?
No. We have upgraded the use of webview accordingly, and using our SDK will not violate Apple's policies.
13.With the current smart ads inventory management mechanism in effect, will the same ad be displayed every time for a Rewarded Video/Interstitial/Interactive adunit?
No, a new ad is shown every time an ad request is made.
14.When does the ad inventory automatically get updated for rewarded video, interstitial and interactive ads?
The smart inventory management system regularly evaluates the inventory, and starts loading new ads once the inventory availability level falls under the threshold. In addition to that, anytime an ad gets closed it immediately triggers the inventory re-evaluation action.
15.I turned on the "Test Mode" for AdNetwork A, but the SDK still loads ads from other AdNetworks.
Wait about 3-5 minutes before the "Test Mode" kicks in. The on/off switch needs to periodically sync with the servers to take effect, typically every few minutes.
16. Is there an API in the SDK for us to know which AdNetwork the currently shown ad is from?
No, there is no API available currently for such purpose.
17. Chartboost video ads sometimes show loading during playback, and will automatically close after a period of time. Is this normal?
Yes, it's normal. When a chartboost video ad is shown and due to network lag or other reasons the loading takes too long, its SDK will automatically close the ad. In this case, the ad closed callback should have been normally received. It will not affect the subsequent ad loading.
18. Why are there no callbacks for the clicks of ads during IronSource Interstitial and Rewarded Video ads?
IronSource SDK is designed in such a way that clicks can jump normally during video playback but without firing any click event, while in the landing page clicks can jump normally, plus firing click events.
19. Manually importing the FBAudienceNetwork Advertising SDK conflicts with the existing FB Analytics SDK. What can I do?
The FBAudienceNetwork Advertising SDK includes the FBSDKCoreKit framework. If your project has already imported the FB Analytics SDK, there should have been another instance of FBSDKCoreKit framework included. That's the reason why it failed. You should simply skip importing this FBSDKCoreKit in this case.
20. Why do users not receive rewards after watching rewarded video ads?
First of all, on some adnetworks rewarded video ads can be skipped. When a user chooses to skip the ads, obviously there shouldn't be any reward callback.
In addition, if a user has not received the reward after watching the rewarded video completely, take the following steps:
- Please make sure that your reward logic is processed in the reward callback, not in the PlayEnd callback. They're NOT the same thing.
- If you have processed the reward logic in the reward callback but the user has not yet received the reward, please watch the ad completely and output a log in the callback to help check whether the SDK has made the reward callback correctly.
21. Why do users still get rewards after skipping rewarded videos?
Please check if your reward processing logic is in the reward callback. The reward callback is the right place to dish out rewards, not the PlayEnd callback.
22. Why does the video in the Rewarded-Video/Interstitial ad not play automatically?
Please confirm whether the device has activated the Low Power mode, since in the Low Power mode iOS tries to save battery by reducing some animations and prohibiting video autoplay.
23. When does *AvailabilityChanged() callback get triggered for a Rewarded Video/Interstitial/Interactive adunit?
- During ad loading, if at least one instance gets filled, the inventory increases and the callback gets triggered and returns a True
- During ad showing, the callback gets triggered and returns a False, regardless of the inventory. This prevents you from showing any other ad until the next time when you check it and get a True returned
- During ad closing, it gets triggered and returns a True as long as the inventory is not drained, otherwise it won't be triggered until the inventory gets replenished when it will return a True
- For manual ad loading, the callback always gets triggered and returns a True with a fill and a False with no fill.
- For automatic(default) ad loading, the callback gets triggered and returns a True with a fill, but does NOT get triggered and return a False with no fill.
24. When I use the Unity plugin to import the AdTimingSDK, it reports the following error: "Cocoapods: 'AdTimingSDK/AdTimingSDK.h' file not found."
After the Unity engine version 2019.3.14f1, the Unity project exports to a Xcode project with an additional UnityFramework file. When using Cocoapods to integrate the AdTiming SDK with pod command, make sure to use target 'UnityFramework' do.
25. Do I need to re-initialize the SDK after the device is disconnected from the network, and do I need to manually call the load() method to load the ad again?
No, the SDK initialization method only needs to be called once. After the network is disconnected and reconnected, for rewarded video or interstitial or interactive ads, the SDK will automatically load the ads for you. On the otherhand, native and banner ads need manual loading.
26. What's the difference between is*Ready() and *AvailabilityChanged()?
is*Ready() is used to know whether the current inventory has certain type of ads; while *AvailabilityChanged() is used to tell you whether you can currently show ads of certain type. When is*Ready() returns true, it does not necessarily mean that the current ad can be shown. If there are two rewarded video ready in the inventory, one of which is shown by calling show(). Calling isRewardedVideoReady() during the ad playback will return True, but the callback of onRewardedVideoAvailabilityChanged() will give you False.
Suppose there is a button for the user to click to start showing rewarded video ads. This button should not be visible or clickable until onRewardedVideoAvailabilityChanged() returns True. After the user clicks the button, you should first use isRewardedVideoReady() to determine whether the ad is ready. If it returns True, call the show() method to show the ad. If it returns False, you should prompt the user with something like "The ad is not ready. Try again later". When onRewardedVideoAvailabilityChanged() returns False, you should make the button unclickable again.