LoginSignup
3
2

More than 5 years have passed since last update.

AppLovinSDKを android java(ネイティブ)で導入する方法

Last updated at Posted at 2016-10-24

AppLovinSDKを android java(ネイティブ)で導入する方法

Unityやcocos2dxとは違い、androidのライフサイクルが絡んでくるので、
個人的にはネイティブで導入する方が難しかった。
複数の動画SDKを入れる場合は、メディエーションで入れるととコールバックがまとめられ楽できるかもw。汗

getActivityやgetApplicationContext等をシングルトンとして引き回したい場合の参考にも。w汗

インスタースティシャル版の導入

Android Studio等でツール・アプリを作る際は、、
初期化後、getApplicationContext()や、getAcitivy()の情報を引き回す必要があり、
それらに注意する。

WeakReferenceというものをキャッシュされたののを引き回す事ができるので、
予め、getApplicationContext()とgetActivity()をできるようにしておくと便利

例:


// MainActivityでセットした参照をキャッシュを使って、applovin再生
final WeakReference<MainActivity> weakRef = new WeakReference<MainActivity>(MainActivity.getInstance());

getApplicationContext()を引きまわす準備

シングルトンの準備

MyApplication.java

public class MyApplication extends Application {

    //シングルトンの代わりとして利用(アプリが終了するまで存在する
    private static MyApplication sInstance; 

    // 取得用
    public static MyApplication getInstance() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();


        sInstance = this;


呼び出し側


MyApplication.getInstance();

これで、AppCompatAcitivy等、Acitivyも持っている場合はこれだけでOK。

getAcitivy()を引き回す

Fragment等で、Acitivyが呼び出したい画面でActivityが取得できない場合は、
FragmentAcitivyを継承しているところで、Singleton化してあげる必要があります。

MainAcitivy.java

public class MainActivity extends FragmentActivity {

    private static MainActivity mainActivityInstance; //シングルトンの代わりとして利用(アプリが終了するまで存在する

    // 取得用
    public static MainActivity getInstance() {
        return mainActivityInstance;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainActivityInstance = this;


呼び出し側


MainActivity.getInstance()


AppLovin動画再生

HogeFrament.java


    private AppLovinIncentivizedInterstitial incentivizedInterstitial;


 //〜〜省略〜〜


    final WeakReference<MainActivity> weakRef = new WeakReference<MainActivity>(MainActivity.getInstance()); // ★先程のMainActivityで用意したインスタンスを使用




 //〜〜省略〜〜


    // Applovin リワード型の読み込み準備
    incentivizedInterstitial = AppLovinIncentivizedInterstitial.create(MyApplication.getInstance()); //先程用意した、MyApplicationのインスタンスを使って、applovinを初期化
    incentivizedInterstitial.preload(new AppLovinAdLoadListener() {
        @Override
        public void adReceived(AppLovinAd appLovinAd) {
            // showButton.setEnabled(true); //動画視聴ボタンを有効化等
        }


        @Override
        public void failedToReceiveAd(int errorCode) {
            log("Rewarded video failed to load with error code " + errorCode);
        }
    });

//〜〜省略〜〜

    // Applivn リワード型再生可能かチェック
    if (incentivizedInterstitial.isAdReadyToDisplay()) {

        // Applovin コールバック
        // Reward Listener
        AppLovinAdRewardListener adRewardListener = new AppLovinAdRewardListener() {
            @Override
            public void userRewardVerified(AppLovinAd appLovinAd, Map map) {
                // AppLovin servers validated the reward. Refresh user balance from your server.  We will also pass the number of coins
                // awarded and the name of the currency.  However, ideally, you should verify this with your server before granting it.

                // i.e. - "Coins", "Gold", whatever you set in the dashboard.
                String currencyName = (String) map.get("currency");

                // For example, "5" or "5.00" if you've specified an amount in the UI.
                String amountGivenString = (String) map.get("amount");

                log("Rewarded " + amountGivenString + " " + currencyName);
                log("");
                // By default we'll show a alert informing your user of the currency & amount earned.
                // If you don't want this, you can turn it off in the Manage Apps UI.

                Logger.d("Applovin_userRewardVerified");


                // 動画視聴完了ポップアップダイアログ表示等...
                DialogFragment hintDialogFragment = new HintDialogFragment();

                Bundle args = new Bundle();
                args.putInt("stamp_id", stampId); //引数
                hintDialogFragment.setArguments(args);
                hintDialogFragment.show(MainActivity.getInstance().getFragmentManager(), "dialog"); // ★先程のMainActivityで用意したインスタンスを使って、dialog等のview表示に!
            }


            @Override
            public void userOverQuota(AppLovinAd appLovinAd, Map map) {
                // Your user has already earned the max amount you allowed for the day at this point, so
                // don't give them any more money. By default we'll show them a alert explaining this,
                // though you can change that from the AppLovin dashboard.

                Logger.d("Applovin_userOverQuota");
            }

            @Override
            public void userRewardRejected(AppLovinAd appLovinAd, Map map) {
                // Your user couldn't be granted a reward for this view. This could happen if you've blacklisted
                // them, for example. Don't grant them any currency. By default we'll show them an alert explaining this,
                // though you can change that from the AppLovin dashboard.

                Logger.d("Applovin_userRewardRejected");
            }

            @Override
            public void validationRequestFailed(AppLovinAd appLovinAd, int responseCode) {

                Logger.d("Applovin_validationRequestFailed" + responseCode);
                if (responseCode == AppLovinErrorCodes.INCENTIVIZED_USER_CLOSED_VIDEO) {
                    // Your user exited the video prematurely. It's up to you if you'd still like to grant
                    // a reward in this case. Most developers choose not to. Note that this case can occur
                    // after a reward was initially granted (since reward validation happens as soon as a
                    // video is launched).
                } else if (responseCode == AppLovinErrorCodes.INCENTIVIZED_SERVER_TIMEOUT || responseCode == AppLovinErrorCodes.INCENTIVIZED_UNKNOWN_SERVER_ERROR) {
                    // Some server issue happened here. Don't grant a reward. By default we'll show the user
                    // a alert telling them to try again later, but you can change this in the
                    // AppLovin dashboard.
                } else if (responseCode == AppLovinErrorCodes.INCENTIVIZED_NO_AD_PRELOADED) {
                    // Indicates that the developer called for a rewarded video before one was available.
                    // Note: This code is only possible when working with rewarded videos.
                }
            }

            @Override
            public void userDeclinedToViewAd(AppLovinAd appLovinAd) {
                // This method will be invoked if the user selected "no" when asked if they want to view an ad.
                // If you've disabled the pre-video prompt in the "Manage Apps" UI on our website, then this method won't be called.

                Logger.d("Applovin_userDeclinedToViewAd");
            }
        };

        // Video Playback Listener
        AppLovinAdVideoPlaybackListener adVideoPlaybackListener = new AppLovinAdVideoPlaybackListener() {
            @Override
            public void videoPlaybackBegan(AppLovinAd appLovinAd) {
                log("Video Started");
                Logger.d("Applovin_videoPlaybackBegan");
            }

            @Override
            public void videoPlaybackEnded(AppLovinAd appLovinAd, double v, boolean b) {
                log("Video Ended");

                Logger.d("Applovin_Video_endied");
            }
        };

        // Ad Dispaly Listener
        AppLovinAdDisplayListener adDisplayListener = new AppLovinAdDisplayListener() {
            @Override
            public void adDisplayed(AppLovinAd appLovinAd) {
                log("Ad Displayed");
            }

            @Override
            public void adHidden(AppLovinAd appLovinAd) {
                log("Ad Dismissed");
            }
        };

        // Ad Click Listener
        AppLovinAdClickListener adClickListener = new AppLovinAdClickListener() {
            @Override
            public void adClicked(AppLovinAd appLovinAd) {
                log("Ad Click");
            }
        };

        // 動画表示
        incentivizedInterstitial.show(weakRef.get(), adRewardListener, adVideoPlaybackListener, adDisplayListener, adClickListener);


        getDialog().dismiss();


        log("Interstitial Displayed");
    } else {
        // Ideally, the SDK preloads ads when you initialize it in your launch activity
        // you can manually load an ad as demonstrated in InterstitialManualLoadingActivity
        log("Interstitial not ready for display.\nPlease check SDK key or internet connection.");
    }

初期化は起動時にやっておくと、バッファリング時間の省略になると思うので、起動時にやっておいた方がいいと思います。

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2