Android के लिए IMA SDK की मदद से, पसंद के मुताबिक विज्ञापन चलाना

IMA वर्शन 3.30.0 और इससे पहले के वर्शन में, IMA SDK, विज्ञापन चलाने से जुड़े सभी लॉजिक, जबकि आपका ऐप्लिकेशन वीडियो चलाने पर फ़ोकस कर रहा हो. इस तरीके को कहते हैं "SDK टूल के मालिकाना हक वाला विज्ञापन चलाना".

अगर आपको अपने वीडियो प्लेयर में विज्ञापन चलाने हैं, तो SDK टूल इसके लिए एक इंटरफ़ेस उपलब्ध कराता है. हम इस तरीके को "कस्टम विज्ञापन चलाना" और इस गाइड के बाकी हिस्से में, इसे लागू करने के बारे में बताया गया है.

ज़रूरी शर्तें

  • बुनियादी IMA इंटिग्रेशन.

हमारा सुझाव है कि आप ऐडवांस सेटिंग का उदाहरण अगर फ़िलहाल आपके पास बेसिक IMA नहीं है, तो GitHub पर शुरुआत करने के लिए ज़रूरी है इंटिग्रेशन. इस उदाहरण में, कस्टम विज्ञापन प्लेबैक की सुविधा पहले से ही लागू की गई है. शेष के साथ कस्टम विज्ञापन प्लेबैक के लिए आवश्यक सुविधाओं के बारे में बताया है IMA विज्ञापन.

VideoAdPlayer के साथ इंटरफ़ेस

कस्टम विज्ञापन प्लेबैक के लिए आपके ऐप्लिकेशन को VideoAdPlayer इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. SDK टूल इस इंटरफ़ेस का इस्तेमाल करके, आपके ऐप्लिकेशन को विज्ञापन दिखाने की सूचना देता है वीडियो. आपका ऐप्लिकेशन, SDK टूल को मुख्य वीडियो विज्ञापन की जानकारी देने के लिए भी इस इंटरफ़ेस का इस्तेमाल करता है इवेंट. इंटरफ़ेस लागू करने के लिए, यह तरीका अपनाएं.

VideoAdPlayer बनाएं

सबसे पहले, पहचान छिपाने वाली VideoAdPlayer क्लास बनाएं requestAds() में:

private VideoAdPlayer videoAdPlayer;
...

private void requestAds(String adTagUrl) {
    videoAdPlayer = new VideoAdPlayer() {
    };
}

वीडियो के तरीके जोड़ें

इसके बाद, ऐसे तरीके जोड़ें जिनसे आपके वीडियो प्लेयर को विज्ञापन चलाने, लोड करने, बंद करने, और रोकने के लिए कहा जाए वीडियो. हम प्लेयर को रिलीज़ करने और वॉल्यूम पाने के लिए, तरीके भी यहां जोड़ते हैं:

videoAdPlayer = new VideoAdPlayer() {
        @Override
        public void playAd() {
            if (mIsAdDisplayed) {
                videoPlayer.resume();
            } else {
                isAdDisplayed = true;
                videoPlayer.play();
            }
        }

        @Override
        public void loadAd(String url) {
            isAdDisplayed = true;
            videoPlayer.setVideoPath(url);
        }
        @Override
        public void stopAd() {
            videoPlayer.stopPlayback();
        }
        @Override
        public void pauseAd() {
            videoPlayer.pause();
        }

        @Override
        public void release() {
            // any clean up that needs to be done
        }

        @Override
        public int getVolume() {
            return videoPlayer.getVolume();
        }
};

ये तरीके, आपके वीडियो प्लेयर से मिलते-जुलते पतले रैपर हैं तरीकों का इस्तेमाल करना होगा. ध्यान दें कि ये तरीके इस्तेमाल किए जाने वाले इंटरनल वैरिएबल को सेट करते हैं का इस्तेमाल करके यह ट्रैक किया जा सकता है कि कोई विज्ञापन दिखाया गया है या नहीं. कस्टम विज्ञापन प्लेबैक में, वीडियो प्लेयर, कॉन्टेंट, वीडियो और वीडियो विज्ञापन, दोनों चलाता है. इसलिए, आपको इन एलिमेंट का इस्तेमाल करते समय जिसका ट्रैक अभी प्रदर्शित है.

विज्ञापन प्लेबैक की प्रोग्रेस

VideoAdPlayer इंटरफ़ेस किसी दूसरे इंटरफ़ेस को लागू करता है, AdProgressProvider, इसलिए आपको इसे भी लागू करना होगा. इसमें सिर्फ़ ये चीज़ें हैं एक तरीका getAdProgress() है. SDK टूल इसका इस्तेमाल करके विज्ञापनों के वीडियो चलाने की जानकारी. इसे अपने पहचान छिपाने वाले VideoAdPlayer में जोड़ें क्लास में नीचे बताया गया है:

VideoAdPlayer videoAdPlayer = new VideoAdPlayer() {
        ...
        @Override
        public VideoProgressUpdate getAdProgress() {
            if (!isAdDisplayed || videoPlayer.getDuration() <= 0) {
                return VideoProgressUpdate.VIDEO_TIME_NOT_READY;
            }
            return new VideoProgressUpdate(videoPlayer.getCurrentPosition(),
                    videoPlayer.getDuration());
        }
};

getAdProgress(), VideoProgressUpdate टाइप दिखाता है, जो वीडियो की मौजूदा स्थिति और अवधि शामिल होनी चाहिए. अगर खिलाड़ी कोई विज्ञापन नहीं चला रहा है या अवधि उपलब्ध नहीं है, तो उसे वापस करने को कहें VideoProgressUpdate.VIDEO_TIME_NOT_READY, जैसा कि उदाहरण में दिखाया गया है.

वीडियो कॉलबैक मैनेज करें

कस्टम विज्ञापन प्लेबैक के लिए आपके ऐप्लिकेशन को SDK टूल को वीडियो इवेंट. SDK टूल के हिसाब से, ये कॉलबैक होते हैं जो VideoAdPlayer.VideoAdPlayerCallback इंटरफ़ेस में बताया गया है. कॉलबैक के तरीकों के बारे में जानने से पहले, आपको SDK टूल के अनुरोध पर कॉलबैक जोड़ और हटा सकेगा. यह है addCallback() और removeCallback() का उपयोग करके VideoAdPlayer में किया गया:

private List<VideoAdPlayerCallback> adCallbacks = new ArrayList<>(1);

VideoAdPlayer videoAdPlayer = new VideoAdPlayer() {
        ...
        @Override
        public void addCallback(VideoAdPlayerCallback videoAdPlayerCallback) {
            adCallbacks.add(videoAdPlayerCallback);
        }

        @Override
        public void removeCallback(VideoAdPlayerCallback videoAdPlayerCallback) {
            adCallbacks.remove(videoAdPlayerCallback);
        }
};

यह इंप्लिमेंटेशन उन कॉलबैक के लिए List<> का इस्तेमाल करता है जिन पर कॉल करना है List<>.add() और remove() तरीके.

कॉलबैक पर कॉल करें

अब SDK टूल की मदद से आपके ऐप्लिकेशन को कॉलबैक जोड़ने और हटाने के लिए कहा जा सकता है, उन जगहों को तय करें जहां कॉलबैक कॉल किया जाता है. अपने ऐप्लिकेशन को कॉल करें ये कॉलबैक तब होते हैं, जब वीडियो बड़े इवेंट होते हैं. जैसे, वीडियो चलाना, रोकना या कोई वीडियो खत्म होने पर या किसी गड़बड़ी का पता चलने पर, उसे फिर से शुरू करने के बारे में सोचें.

ऐसा करने के लिए, SampleVideoPlayer को बड़ा करें, ताकि इनको सुनने वाले लोग जोड़े जा सकें VideoFragment से जोड़े गए वीडियो इवेंट. कम्यूनिटी बनाने की वजह इन विज्ञापन कॉलबैक को कॉल करने के लिए, SampleVideoPlayer में एक अलग लिसनर ऐसा इसलिए है, क्योंकि SampleVideoPlayer को विज्ञापनों के बारे में कुछ भी नहीं पता इसलिए आपको उसके वीडियो इवेंट को ऐसी चीज़ पर भेजना चाहिए जिसमें विज्ञापन दिखाए जा सकें.

public interface OnVideoEventsListener {
    void onPlay();
    void onResume();
    void onPause();
    void onError();
}

private final List<OnVideoEventsListener> onVideoEventsListeners = new ArrayList<>(1);

public void addVideoEventsListener(OnVideoEventsListener listener) {
    onVideoEventsListeners.add(listener);
}

शुरू करें, रोकें, और फिर से शुरू करें

वीडियो चलाने की स्थिति पर नज़र रखने और नए बदलाव जोड़ने के लिए, एक नई सूची बनाएं SampleVideoPlayer में start() और pause() तरीकों के लिए:

private enum PlaybackState {
    STOPPED, PAUSED, PLAYING
}

private PlaybackState playbackState = PlaybackState.STOPPED;

@Override
public void start() {
    super.start();
    switch (playbackState) {
        case STOPPED:
            for (OnVideoEventsListener listener : onVideoEventsListeners) {
                listener.onPlay();
            }
            break;
        case PAUSED:
            for (OnVideoEventsListener listener : onVideoEventsListeners) {
                listener.onResume();
            }
            break;
        default:
            // Already playing; do nothing.
            break;
    }
    playbackState = PlaybackState.PLAYING;
}

@Override
public void pause() {
    super.pause();
    playbackState = PlaybackState.PAUSED;
    for (OnVideoEventsListener listener : onVideoEventsListeners) {
        listener.onPause();
    }
}

गड़बड़ियां ठीक करना

आपने init() में जो गड़बड़ी लिसनर सेट की है उसके लिए, वीडियो प्लेयर की तय की गई, गड़बड़ी को ठीक करने वाले का नाम बदलें:

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
    playbackState = PlaybackState.STOPPED;
    for (OnVideoEventsListener listener : onVideoEventsListeners) {
        listener.onError();
    }

    // Returning true signals to MediaPlayer that the error was handled.
    // This  prevents the completion handler from being called.
    return true;
}

लिसनर को लागू करें

VideoFragment पर वापस जाएं और पहचान छिपाने वाला OnVideoEventsListener जोड़ें आपके SampleVideoPlayer इंस्टेंस में:

mVideoPlayer.addVideoEventsListener(new OnVideoEventsListener() {
    @Override
    public void onPlay() {
        if (isAdDisplayed) {
            for (VideoAdPlayerCallback callback : adCallbacks) {
                callback.onPlay();
            }
        }
    }

    @Override
    public void onResume() {
        if (isAdDisplayed) {
            for (VideoAdPlayerCallback callback : adCallbacks) {
                callback.onResume();
            }
        }
    }

    @Override
    public void onPause() {
        if (isAdDisplayed) {
            for (VideoAdPlayerCallback callback : adCallbacks) {
                callback.onPause();
            }
        }
    }

    @Override
    public void onError() {
        if (isAdDisplayed) {
            for (VideoAdPlayerCallback callback : adCallbacks) {
                callback.onError();
            }
        }
    }
});

OnVideoCompletedListener में से onVideoCompleted() तरीका बदलें विज्ञापन वीडियो के खत्म होने के मामले को मैनेज करने के लिए:

public void onVideoCompleted() {
    // Handle completed event for playing post-rolls.
    if (isAdDisplayed) {
        for (VideoAdPlayerCallback callback : adCallbacks) {
            callback.onEnded();
        }
    } else {
        if (adsLoader != null) {
            adsLoader.contentComplete();
    }
}

कॉन्टेंट और विज्ञापनों के बीच स्विच करना

यह उदाहरण दोनों को चलाने के लिए वीडियो प्लेयर के एक ही इंस्टेंस का इस्तेमाल करता है कॉन्टेंट और विज्ञापन हैं, इसलिए आपको एक से दूसरे पर स्विच करने के लिए कुछ लॉजिक जोड़ना होगा वीडियो और विज्ञापन देखने की सुविधा मिलती है. इसके बाद, पेज पर मौजूद कॉन्टेंट को फिर से लोड करके, वीडियो के उस हिस्से पर जाएं जहां से विज्ञापन शुरू हुआ था. दो जोड़ें फ़ंक्शन का इस्तेमाल करें:

private int savedContentPosition = 0;

private void pauseContent() {
    savedContentPosition = videoPlayer.getCurrentPosition();
    videoPlayer.stopPlayback();
    isAdDisplayed = true;
}

private void resumeContent() {
    videoPlayer.setVideoPath(getString(R.string.content_url));
    videoPlayer.seekTo(mSavedContentPosition);
    videoPlayer.play();
    isAdDisplayed = false;
}

इन्हें तब कॉल किया जाता है, जब CONTENT_PAUSE_REQUESTED और इसमें CONTENT_RESUME_REQUESTED इवेंट मिले हैं VideoFragment.onAdEvent(), क्रम से:

case CONTENT_PAUSE_REQUESTED:
    pauseContent();
    break;
case CONTENT_RESUME_REQUESTED:
    resumeContent();
    break;

कस्टम विज्ञापन प्लेबैक सक्षम करें

आखिरी कदम SDK टूल को यह बताना है कि आप कस्टम विज्ञापन प्लेबैक का इस्तेमाल कर रहे हैं. ऐसा करने के लिए, अपने AdDisplayContainer को VideoAdPlayer पास करें:

adDisplayContainer.setPlayer(videoAdPlayer);

अपने प्लेयर को setPlayer() को पास करना ज़रूरी है. या फिर, SDK टूल, SDK टूल के मालिकाना हक वाले प्लेबैक का इस्तेमाल करता है.

हो गया. अपने वीडियो में, पसंद के मुताबिक विज्ञापन चलाने की सुविधा जोड़ने के लिए सिर्फ़ यही चरण ज़रूरी हैं IMA लागू करना. अपने लागू करने के तरीके की तुलना ऐडवांस सेटिंग का उदाहरण GitHub पर, अगर आपको कोई समस्या आती है.