Menu

Splash ad

1. Splash Ad Introduction


1.1 Integration Suggestions

To improve the loading efficiency of Splash Ads, you can refer to Cold Start Strategy and SDK Preset Strategy. For details, please refer to Splash Ad Integration Best Practices.

2. API Instructions

2.1 Ad Loading

ATSplashAd: The loading class for Splash ads.

Method Description
ATSplashAd(Context context, String placementId, ATSplashAdListener listener, int fetchAdTimeout) Splash initialization method. Parameter descriptions: context: Context used for loading ads (recommended to pass an Activity). placementId: Taku's Splash Ad placement ID. listener: Ad event listener. fetchAdTimeout: Ad load timeout in milliseconds. Note: The default ad load timeout is 5000ms.
ATSplashAd(Context context, String placementId, ATSplashAdListener listener) Splash initialization method. Same parameter meaning as above.
void loadAd() Initiate ad loading.

Ad Loading:

Copy
// Note: xxx needs to be replaced with your Splash Ad timeout value, unit: milliseconds.
ATSplashAd splashAd = new ATSplashAd(context, placementId, listner, xxx);
splashAd.loadAd();

2.2 Ad Display

ATSplashAd:

Method Description
boolean isAdReady() Determine whether the current ATSplashAd has a displayable ad.
void show(Activity activity, ViewGroup container) Display a Splash ad. Parameter descriptions: activity: The Activity displaying the ad. container: The container displaying the ad.
void show(Activity activity, final ViewGroup container, ATSplashSkipInfo atSplashSkipInfo) Use a custom SkipView to display a Splash ad. Same parameter meaning as above. atSplashSkipInfo: Custom SkipView feature class. Custom SkipView is only effective for the following ads: MyOffer, Adx, OnlineAPI, Pangle (China). Please refer to Demo.
void show(Activity activity, ViewGroup container, ATShowConfig showConfig) (Added in v6.3.10) Display a Splash ad in a specified scenario. Parameter descriptions:
activity: The Activity displaying the ad.
container: The container displaying the ad.
showConfig: Extra parameters that can be passed during display, as follows:
1. ATShowConfig#showCustomExt(String showCustomExt): Can pass custom parameters during display. The passed parameter will be returned via ATAdInfo#getShowCustomExt().
2. ATShowConfig#scenarioId(String scenarioId): Can pass an ad scenario, same as show(Activity activity, ViewGroup container,String scenario).
void show(Activity activity, final ViewGroup container, ATSplashSkipInfo atSplashSkipInfo, ATShowConfig showConfig) (Added in v6.3.10) Display a Splash ad in a specified scenario using a custom SkipView. Same parameter meaning as above. atSplashSkipInfo: Custom SkipView feature class. Custom SkipView is only effective for the following ads: MyOffer, Adx, OnlineAPI, Pangle (China). Please refer to Demo.
void entryAdScenario(String placementId, String scenarioId) Enter business scenario for current Ad Placement cache status statistics. Here scenario refers to the ad display scenario (optional, can be directly passed as null). For creating scenario parameters from the dashboard and usage, please refer to Business Scenario Cache Status Statistics.
void entryAdScenario(String scenarioId) (v6.5.80 and above) Enter business scenario for current Ad Placement cache status statistics. Here scenario refers to the ad display scenario (optional, can be directly passed as null). For creating scenario parameters from the dashboard and usage, please refer to Business Scenario Cache Status Statistics.

Ad Display:

Copy
  /*
     To count scenario arrival rate, related info can be found at "https://help.takuad.com/docs/1RWLAv"
     Call the "enter ad scenario" method when the ad triggering conditions are met, for example:
     ** If the ad scenario is to display an ad after a cleanup is finished, call it when the cleanup is finished;
     * 1. First call "entryAdScenario"
     * 2. Then call "isAdReady" to check if it is displayable
     * 3. Finally call "show" to display
     * 4. Passing the scenario ID into scenario will only result in data showing in the dashboard's scenario management (optional).
     */
 ATSplashAd.entryAdScenario("your splash placementID", "your scenarioID");
// v6.5.80 and above
 splashAd.entryAdScenario("your scenarioID");
// Before displaying, check that there is a cached ad and the current Activity is in the foreground.
if (splashAd.isAdReady() && inForeBackground) {
    // The container size should be at least 75% of the screen.
    splashAd.show(activity, container,"your scenarioID");
}

Passing Custom Parameters During Display:

Taku SDK v6.3.10 and above supports developers passing custom parameters during display. Custom parameters passed during display are independent of custom parameters passed during Load. Custom parameters passed during display can be returned in the Taku SDK callback info.

2.3 Local Parameters

ATSplashAd:

Method Description
void setLocalExtra(Map) Set local parameters. The key is obtained via ATAdConst.KEY.

ATAdConst.KEY: Predefined Key values for LocalExtra local parameters.

Key Description
AD_WIDTH Ad width.
AD_HEIGHT Ad height.

2.4 Ad Object

ATSplashAd:

Method Description
checkAdStatus Get the status object ATAdStatusInfo of the current Ad Placement.
checkValidAdCaches Query the ATAdInfo objects of all cached info for the current Ad Placement. ATAdInfo: Ad information object, can distinguish ad platforms, mainly contains ID info of third-party Mediation platforms. See ATAdInfo Info Description

ATAdStatusInfo: Status object of the Ad Placement.

Method Description
boolean isLoading() Determine whether the current Ad Placement is currently loading an ad.
boolean isReady() Determine whether the current Ad Placement has a displayable ad. Same function as ATSplashAd.isAdReady().
getATTopAdInfo Get the ad cache info ATAdInfo object with the highest priority for the current Ad Placement. ATAdInfo: Ad information object, can distinguish ad platforms, mainly contains ID info of third-party Mediation platforms. See ATAdInfo Info Description

2.5 Ad Listener

ATSplashAdListener: Event callback class for Splash ads.

Method Description
void onAdLoaded(boolean isTimeout) Ad load success callback. isTimeout: Whether the ad load time exceeded the time specified by fetchAdTimeout.
void onNoAdError(AdError error) Ad load failure callback. You can get the full error info via AdError.getFullErrorInfo(). Please refer to AdError.
Note: Do not execute the ad loading method in this callback for retry, otherwise it may cause many unnecessary requests and may cause the app to lag.
void onAdShow(ATAdInfo atAdInfo) Ad impression callback. ATAdInfo: Ad information object, can distinguish ad platforms, mainly contains ID info of third-party Mediation platforms. See ATAdInfo Info Description
void onAdClick(ATAdInfo atAdInfo) Ad click callback. Same parameter meaning as above.
void onAdDismiss(ATAdInfo entity, ATSplashAdExtraInfo splashAdExtraInfo) Ad close callback. Same parameter meaning as above. ATSplashAdExtraInfo: Splash Ad close extra info, including the Splash Eyelet Ad control interface class. Developers can use this interface to control the display of eyelet ads.
Note: (1) When the Splash Ad creative of Pangle (China) or GDT supports eyelet features, splashEyeAd will not be null. (2) When displaying a Kuaishou Splash Ad, splashEyeAd will be a non-null value, but it does not necessarily mean that this Kuaishou Splash Ad creative supports eyelet features. When it is not supported, calling the IATSplashEyeAd#show() method will directly call back the ATSplashEyeAdListener#onAdDismiss() method. (3) When splashEyeAd is not null but the developer does not want to support the eyelet feature, splashEyeAd.destroy() must be called to release resources, then navigate to the main page or remove the Splash View.
void onAdLoadTimeout Ad load timeout callback. Handle the Splash Ad load timeout here.
Note: (1) After the ad load timeout callback, the Splash Ad is still loading. If it loads successfully, it will trigger onAdLoaded(true). (2) If the Splash Ad loaded this time is not displayed, it will be placed in the cache for the next display.

ATSplashExListener: Inherits from ATSplashAdListener, methods are the same as ATSplashAdListener, with additional callback descriptions as follows:

Method Description
void onDeeplinkCallback(ATAdInfo atAdInfo, boolean isSuccess) Deeplink callback, for Adx, OnlineApi ads. isSuccess: Whether successful.
void onDownloadConfirm(Context context, ATAdInfo atAdInfo, View clickView, ATNetworkConfirmInfo networkConfirmInfo) Callback method when an app-type ad click triggers a download. ATNetworkConfirmInfo: Callback info provided by the third-party ad platform (Currently only GDT's GDTDownloadFirmInfo is available.) ATAdInfo: Ad information object, can distinguish ad platforms, mainly contains ID info of third-party Mediation platforms. See ATAdInfo Info Description
void onSplashAdReward(ATAdInfo atAdInfo) v6.6.21 and above (GDT reward support).

IATSplashEyeAd: Control class for Splash Eyelet Ads.

Method Description
show(Context context, Rect rect, ATSplashEyeAdListener atSplashEyeAdListener) Display a Splash Eyelet (V+, small window) ad. context: Context. rect: The display size of the Splash Eyelet Ad when the zoom animation ends, starting from the top-left corner of the screen (Note: Kuaishou requires this parameter to be passed.) atSplashEyeAdListener: Splash Eyelet Ad event listener.
getSuggestedSize(Context context) Get the recommended ad display size when the zoom animation ends (Currently only Pangle (China) returns this. It is recommended to prioritize using this size.)
onFinished When the zoom animation finishes, the developer must call this method to notify the SDK to display the ad's close button.

ATSplashEyeAdListener: Event callback class for Splash Eyelet Ads.

Method Description
onAnimationStart(View splashView) The developer needs to execute the zoom animation of the Splash Eyelet Ad in this callback. splashView: View of the Splash ad.
Note: (1) Sample code for the zoom animation can be referenced in the Demo. (2) When the zoom animation ends, IATSplashEyeAd#onFinished() must be called. (3) Kuaishou will not trigger this callback. Kuaishou's zoom animation cannot be controlled.
onAdDismiss(boolean isSupportEyeSplash, String errorMsg) Splash Eyelet Ad close callback. It is recommended to call IATSplashEyeAd#destroy() in this callback. isSupportEyeSplash: Whether Splash Eyelet is supported. errorMsg: When an error occurs, the error message will be displayed here.
Note: The timing of each platform triggering this callback varies; it may be when the close button is clicked or when the ad playback ends.

ATSplashSkipInfo: Custom SkipView feature class.

Method Description
ATSplashSkipInfo(View skipView, long countDownDuration, long callbackInterval, ATSplashSkipAdListener atSplashSkipAdListener) Custom SkipView feature class constructor. skipView: The developer's custom skip button View. countDownDuration: Total countdown duration (unit: ms), default 5s, minimum can be set to 2s. callbackInterval: Trigger interval for the countdown callback (unit: ms), default triggers the ATSplashSkipAdListener#onAdTick() callback every 1s, minimum can be set to 20ms. atSplashSkipAdListener: Custom SkipView event listener class.
Note: (1) When skipView is passed as null, the custom SkipView feature will not take effect. (2) If the developer wishes to customize the countdown animation, the trigger interval of the countdown callback can be changed via the callbackInterval parameter.
ATSplashSkipInfo(View skipView, ATSplashSkipAdListener atSplashSkipAdListener) Custom SkipView feature class constructor. Same parameter meaning as above.

ATSplashSkipAdListener: Custom SkipView event listener class.

Method Description
onAdTick(long duration, long remainder) Countdown callback. Developers can update the countdown animation in this callback. duration: Total countdown duration (unit: ms). remainder: Current remaining countdown progress (unit: ms).
isSupportCustomSkipView(boolean isSupport) Callback notifying the developer whether the currently displayed ad supports the custom SkipView. isSupport: true means the currently displayed ad platform supports it, false means it does not.
Note: (1) The developer can determine in this callback that when isSupport is true, set skipView to visible.

3. Sample Code


Copy
// Note: xxx needs to be replaced with your Splash Ad timeout value, unit: milliseconds.
ATSplashAd splashAd = new ATSplashAd(context, placementId, listner, xxx);
splashAd.loadAd();

 /*
     To count scenario arrival rate, related info can be found at "https://docs.takuad.com/#/zh-cn/android/NetworkAccess/scenario/scenario"
     Call the "enter ad scenario" method when the ad triggering conditions are met, for example:
     ** If the ad scenario is to display an ad after a cleanup is finished, call it when the cleanup is finished;
     * 1. First call "entryAdScenario"
     * 2. Then call "isAdReady" to check if it is displayable
     * 3. Finally call "show" to display
     * 4. Passing the scenario ID into scenario will only result in data showing in the dashboard's scenario management (optional).
     */
 ATSplashAd.entryAdScenario("your splash placementID", "your scenarioID");
// Before displaying, check that there is a cached ad and the current Activity is in the foreground.
if (splashAd.isAdReady() && inForeBackground) {
    // The container size should be at least 75% of the screen.
    splashAd.show(activity, container,"your scenarioID");
}

For detailed Splash Ad sample code, please refer to the SplashAdActivity class in Demo.

Cold Start Sample:

Copy
ATSplashExListener listener = new ATSplashExListener() {
    ......
    @Override
    public void onAdLoaded(boolean isTimeout) {
        // When the load has not timed out
        if(!isTimeout){
            // Display the ad when the current Activity is in the foreground
            if(inForeBackground){
                // The container size should be at least 75% of the screen.
                splashAd.show(activity, container);
            }else{
                // Wait for the app to return to the foreground before displaying
                needShowSplashAd = true;
            }
        }
    }

    @Override
    public void onAdLoadTimeout() {
        // After load timeout, directly navigate to the main interface.
        jumpToMainActivity();
    }

    @Override
    public void onNoAdError(AdError adError) {
        // Navigate directly to the main interface on load failure.
        jumpToMainActivity();
    }

    @Override
    public void onAdShow(ATAdInfo entity) {

    }

    @Override
    public void onAdDismiss(ATAdInfo entity, ATSplashAdExtraInfo splashAdExtraInfo) {
        // =1 Undifferentiated =2 Skip ended =3 Countdown ended =4 Ad click ended =99 Splash display failed
        if(splashAdExtraInfo.getDismissType()==ATAdConst.DISMISS_TYPE.SHOWFAILED){
    }
        // Navigate to the main interface after the Splash Ad display is closed.
        // Note: Some platforms do not pause the countdown when navigating to the landing page. Even while viewing the landing page, onAdDismiss will still be called back after the countdown ends.
        // Therefore, special handling is required during page navigation. Refer to the sample code below for details.
        jumpToMainActivity();
    }
    ......
};

// Note: xxx needs to be replaced with your Splash Ad timeout value, unit: milliseconds.
ATSplashAd splashAd = new ATSplashAd(context, placementId, listner, xxx);

if (splashAd.isAdReady()) {
    // The container size should be at least 75% of the screen.
    splashAd.show(activity, container);
}else{
    splashAd.loadAd();
}

onAdDismiss() Splash Ad page navigation sample:

Copy
// Flag for whether a page navigation is needed
boolean needJump;

@Override
protected void onResume() {
    super.onResume();
    if (needJump) {
        jumpToMainActivity();
    }
    needJump = true;
}

@Override
protected void onPause() {
    super.onPause();
    needJump = false;
}

public void jumpToMainActivity() {
    if (!needJump) {
        needJump = true;
        return;
    }
    Intent intent = new Intent(this, YourMainActivity.class);
    startActivity(intent);
    finish();
}

4. Ad Platform-Specific Configuration Instructions


4.1 Admob

Admob's Splash Ad does not need to depend on a container for display; it can only be displayed full-screen. After the ad is displayed, there will be no countdown and it will not auto-skip.

4.2 Baidu

If you have integrated Baidu SDK's Splash Ad, you need to select the SkipView display style in the Baidu dashboard (Baidu dashboard defaults to not displaying the SkipView).

4.3 Pangle (China)

Before loading the ad, the ad width and height must be set. An example is as follows:

Copy
// Note: xxx needs to be replaced with your Splash Ad timeout value, unit: milliseconds.
splashAd = new ATSplashAd(this, placementId, atMediationRequestInfo, this, xxx); 
Map localMap = new HashMap<>(); 
localMap.put(ATAdConst.KEY.AD_WIDTH, width);// Unit: px 
localMap.put(ATAdConst.KEY.AD_HEIGHT, height);// Unit: px 
splashAd.setLocalExtra(localMap); 
splashAd.loadAd();

Note: If the set width and height are inconsistent with the container width and height during display, or if the template rendering option in the Taku dashboard does not correspond to the Pangle (China) dashboard, the ad may appear incomplete, blurry, or distorted.

5. Splash Eyelet Ad Sample


Note:

① Since it is not guaranteed that an eyelet-supporting Splash Ad will always load, for fill rate issues with Splash Ad eyelet creative materials, please contact the ad platform for handling.

② For the sample code below, please refer to the Demo.

5.1 The Splash Activity and the Eyelet Ad Display Activity Are Not the Same

(1) Create a SplashEyeAdHolder class to cache the IATSplashEyeAd instance.

Copy
public class SplashEyeAdHolder {
    public static IATSplashEyeAd splashEyeAd;
}
Copy
public class SplashAdShowActivity extends Activity implements ATSplashAdListener {
    ...
    @Override
    public void onAdDismiss(ATAdInfo entity, ATSplashAdExtraInfo splashAdExtraInfo) {
        Log.i(TAG, "onAdDismiss:\n" + entity.toString());

        // (1) When the Splash Ad creative of Pangle (China) or GDT supports eyelet features, splashEyeAd will not be null.
        // (2) When displaying a Kuaishou Splash Ad, splashEyeAd will be a non-null value, but it does not necessarily mean that this Kuaishou Splash Ad creative supports eyelet features. When it is not supported, calling the IATSplashEyeAd#show() method will directly call back the ATSplashEyeAdListener#onAdDismiss() method.
        // (3) When splashEyeAd is not null but the developer does not want to support the eyelet feature, splashEyeAd.destroy() must be called to release resources, then navigate to the main page or remove the Splash View.

        SplashEyeAdHolder.splashEyeAd = splashAdExtraInfo.getAtSplashEyeAd();

        jumpToMainActivity();
    }
}

(2) Set the Splash Ad related info (SplashZoomOutManager, please refer to the Demo), while navigating to the home screen Activity and cancelling the page navigation animation, then close the current page.

Copy
public class SplashAdShowActivity extends Activity implements ATSplashAdListener {
    ...
    public void jumpToMainActivity() {
        if (!hasHandleJump) {
            hasHandleJump = true;

            if (SplashEyeAdHolder.splashEyeAd != null) {
                try {
                    SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());
                    zoomOutManager.setSplashInfo(container.getChildAt(0),
                            getWindow().getDecorView());
                } catch (Throwable e) {
                    Log.e(TAG, "jumpToMainActivity: ------------------------------------------ error");
                    e.printStackTrace();
                }

                Intent intent = new Intent(this, TestMainActivity.class);
                startActivity(intent);

                overridePendingTransition(0, 0);
            }

            finish();
            Toast.makeText(this, "start your MainActivity.", Toast.LENGTH_SHORT).show();
        }
    }
}

(3) In the home screen Activity, create the showSplashEyeAd() method.

Copy
public class TestMainActivity extends Activity {
    ...
    private void showSplashEyeAd() {

        if (SplashEyeAdHolder.splashEyeAd == null) {
            return;
        }

        SplashEyeAdHolder.splashEyeAd.show(TestMainActivity.this, null, new ATSplashEyeAdListener() {
            @Override
            public void onAnimationStart(View splashView) {
                // Execute the zoom animation
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());

                // It is recommended to prioritize using the size returned by IATSplashEyeAd#getSuggestedSize() as the target size for the zoom animation.
                int[] suggestedSize = SplashEyeAdHolder.splashEyeAd.getSuggestedSize(getApplicationContext());
                if (suggestedSize != null) {
                    zoomOutManager.setSplashEyeAdViewSize(suggestedSize[0], suggestedSize[1]);
                }
                zoomOutManager.startZoomOut((ViewGroup) getWindow().getDecorView(),
                        findViewById(android.R.id.content), new SplashZoomOutManager.AnimationCallBack() {

                            @Override
                            public void animationStart(int animationTime) {

                            }

                            @Override
                            public void animationEnd() {
                                Log.i(TAG, "animationEnd---------: eye ad");

                                // When the zoom animation finishes, IATSplashEyeAd#onFinished() must be called to notify the SDK.
                                SplashEyeAdHolder.splashEyeAd.onFinished();
                            }
                        });

            }

            @Override
            public void onAdDismiss(boolean isSupportEyeSplash, String errorMsg) {
                Log.i(TAG, "onAdDismiss---------: close eye ad");

                // It is recommended to call IATSplashEyeAd#destroy() in this callback to release resources, as well as release other resources, to avoid memory leaks.
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());
                zoomOutManager.clearStaticData();

                SplashEyeAdHolder.splashEyeAd.destroy();
                SplashEyeAdHolder.splashEyeAd = null;
            }
        });
    }

}

(4) In the home screen Activity, call showSplashEyeAd() to display the eyelet ad (it is recommended to call showSplashEyeAd() in the onAttachedToWindow() callback).

Copy
 public class TestMainActivity extends Activity {
     ...
     @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();

        showSplashEyeAd();
    }
}

5.2 The Splash Activity and the Eyelet Ad Display Activity Are the Same

Copy
public class SplashAdShowActivity extends Activity implements ATSplashAdListener {
    ...
    @Override
    public void onAdDismiss(ATAdInfo entity, IATSplashEyeAd splashEyeAd) {
        Log.i(TAG, "onAdDismiss:\n" + entity.toString());

        // (1) When the Splash Ad creative of Pangle (China) or GDT supports eyelet features, splashEyeAd will not be null.
        // (2) When displaying a Kuaishou Splash Ad, splashEyeAd will be a non-null value, but it does not necessarily mean that this Kuaishou Splash Ad creative supports eyelet features. When it is not supported, calling the IATSplashEyeAd#show() method will directly call back the ATSplashEyeAdListener#onAdDismiss() method.
        // (3) When splashEyeAd is not null but the developer does not want to support the eyelet feature, splashEyeAd.destroy() must be called to release resources, then navigate to the main page or remove the Splash View.


        if (container != null) {
            container.removeAllViews();
            container.setVisibility(View.GONE);
        }  

        // Display the eyelet ad
        showSplashEyeAd(splashEyeAd);
    }

     private void showSplashEyeAd(IATSplashEyeAd splashEyeAd) {
        if (splashEyeAd == null) {
            return;
        }

        splashEyeAd.show(SplashAdShowInCurrentActivity.this, null, new ATSplashEyeAdListener() {
            @Override
            public void onAnimationStart(View splashView) {
                // Execute the zoom animation
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());

                // It is recommended to prioritize using the size returned by IATSplashEyeAd#getSuggestedSize() as the target size for the zoom animation.
                int[] suggestedSize = splashEyeAd.getSuggestedSize(getApplicationContext());
                if (suggestedSize != null) {
                    zoomOutManager.setSplashEyeAdViewSize(suggestedSize[0], suggestedSize[1]);
                }

                zoomOutManager.setSplashInfo(splashView, getWindow().getDecorView());
                ViewGroup content = findViewById(android.R.id.content);
                zoomOutManager.startZoomOut(splashView, content, content, new SplashZoomOutManager.AnimationCallBack() {

                    @Override
                    public void animationStart(int animationTime) {

                    }

                    @Override
                    public void animationEnd() {
                        Log.i(TAG, "animationEnd---------: eye ad");

                        // When the zoom animation finishes, IATSplashEyeAd#onFinished() must be called to notify the SDK.
                        splashEyeAd.onFinished();
                    }
                });


            }

            @Override
            public void onAdDismiss(boolean isSupportEyeSplash, String errorMsg) {
                Log.i(TAG, "onAdDismiss---------: eye ad");

                // It is recommended to call IATSplashEyeAd#destroy() in this callback to release resources, as well as release other resources, to avoid memory leaks.
                SplashZoomOutManager zoomOutManager = SplashZoomOutManager.getInstance(getApplicationContext());
                zoomOutManager.clearStaticData();
                splashEyeAd.destroy();
            }
        });
    }
}

6. First-Launch Splash Loading Efficiency Improvement Plan


Background: When loading a Splash Ad for the first time after app installation, Taku first needs to pull the configured Ad Placement info from the dashboard and cache it locally, and only then will it request ads from the ad platform. This involves two network requests (sequential), which affects the Splash Ad loading efficiency. Below are two ways to improve the Splash load efficiency after the app's first launch.

6.1 (v6.1.78 and later) Preset Strategy Configuration (Recommended)

To improve the ad loading effect during the first cold start, create a traffic group with SDK Preset Strategy on the Splash Ad Placement, then configure the waterfall in this traffic group. It is also recommended to add a Fallback Ad Source, and finally export the SDK Preset Strategy and preload it into the app. For specific integration documentation, see the SDK Preset Strategy Usage Instructions.

Configuration Effect: This allows the SDK preset Splash strategy to be implemented, while also enabling the Fallback Ad Source functionality. That is: this fallback Ad Source will initiate requests in parallel with the overall waterfall under the Ad Placement. And the user will not necessarily use the fallback ad on the first request; instead, the waterfall and fallback Ad Source requests proceed in parallel normally, achieving maximum monetization value.

Note: The preset strategy is only used when there is no locally cached strategy available.

Previous
Manual loading
Next
Splash Ad Best Practices
Last modified: 2026-07-07Powered by