LoginSignup
0
0

More than 5 years have passed since last update.

iOS Adstir(アドステア)導入 動画リワード編

Posted at

iOSアプリに動画リワードを表示するためにAdstirを導入したのでメモ。
※できるだけ本家を参考にしましょう。この情報は最新で無い可能性があります。
【united-adstir/AdStir-Integration-Guide-iOS: AdStir Integration Guide for iOS App】
https://github.com/united-adstir/AdStir-Integration-Guide-iOS

環境

Swift 4
Xcode 9.2
Adstir 2.11.2

ライブラリ導入

AdstirはPodで導入する方法と、手動で導入する方法があります。
基本はPodで入れたほうがいいかと思います。
特にAdstirは個別の動画広告SDKもPod経由で導入できるので、全部Podで入れるのをおすすめします。
以下は例です。全ての動画リワード用のSDKを一気に導入したり、下記のように個別に指定もできます。

Podfile(例)
def default_install_pods
  pod 'AdStir-Ads-SDK'
  pod 'AdStir-Ads-SDK-VideoAdSDKBundled/AdCorsa', :path => 'AdstirAdsSdkiOS-2.11.2-VideoAdSDKBundled'
  pod 'AdStir-Ads-SDK-VideoAdSDKBundled/Maio', :path => 'AdstirAdsSdkiOS-2.11.2-VideoAdSDKBundled'
  pod 'AdStir-Ads-SDK-VideoAdSDKBundled/Nend', :path => 'AdstirAdsSdkiOS-2.11.2-VideoAdSDKBundled'
  pod 'AdStir-Ads-SDK-VideoAdSDKBundled/UnityAds', :path => 'AdstirAdsSdkiOS-2.11.2-VideoAdSDKBundled'
  pod 'AdStir-Ads-SDK-VideoAdSDKBundled/Vungle', :path => 'AdstirAdsSdkiOS-2.11.2-VideoAdSDKBundled'
  pod 'AdStir-Ads-SDK-VideoAdSDKBundled/Mobvista', :path => 'AdstirAdsSdkiOS-2.11.2-VideoAdSDKBundled'
end

target 'TargetName' do
  default_install_pods
end

そして、プロジェクトルート直下にAdstirからDLしてきたAdstirAdsSdkiOS-2.11.2-VideoAdSDKBundledディレクトリをコピーします。(このディレクトリ名とPodfileの :path => 'ここを同じ名前にする')
そして、導入するライブラリ名のディレクトリとAdStir-Ads-SDK-VideoAdSDKBundled.podspecを残して、他は消します(いらないので)
スクリーンショット 2018-02-26 17.57.41.png

参考:
【CocoaPodsを利用した組み込み · united-adstir/AdStir-Integration-Guide-iOS Wiki】
https://github.com/united-adstir/AdStir-Integration-Guide-iOS/wiki/CocoaPods%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF
【CocoaPodsを利用した動画SDKの組み込み · united-adstir/AdStir-Integration-Guide-iOS Wiki】
https://github.com/united-adstir/AdStir-Integration-Guide-iOS/wiki/CocoaPods%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%8B%95%E7%94%BBSDK%E3%81%AE%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF

初期設定

AppDelegate.swift
// 引数にはユーザーを判別できる一意なID的なものを指定するといいです。
AdstirVideoAds.setMediaUserID(UIDevice.currentDevice().identifierForVendor?.UUIDString)
// AdstirVideoAds.prepareは同じIDを指定して叩きまくってもCrashはしなかったです。
// なので、AppDelegateではなく、それぞれ動画リワードを表示するところで叩いても大丈夫そうです。 
AdstirVideoAds.prepare(withMedia:"メディアID", spots: [枠No, 枠No])

実装

ViewController.swift
import UIKit
import AdstirAds

class ViewController: UIViewController {

    @IBOutlet weak var statusLabel: UILabel!
    @IBOutlet weak var showVideoButton: UIButton!

    // リワード広告を表示するボタンのターゲットメソッド
    // ボタンをタップして、広告準備が終わっていなかったら終わるまでループしてまちます
    // なのでボタンが複数回押されないようになんかしらしてください
    @IBAction func showVideoButtonTouchUpInside(sender: AnyObject) {
        if self.didLoadMovieReward {
            self.videoReward?.show(from: self)
        } else {
            // 広告の準備が終わっていなかったら1秒待ちます
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                self.playMovieRewardIfReady()
            }
        }
    }

    private var videoReward: AdstirVideoReward?
    private var didLoadMovieReward = false

    override func viewDidLoad() {
        super.viewDidLoad()

        // AdstirVideoRewardの表示準備をします。
        let videoReward = AdstirVideoReward(media: "メディアID", spot: 枠No)
        videoReward?.delegate = self
        self.videoReward = videoReward
        self.videoReward?.load()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    deinit {
                // 後処理です。呼ばないとメモリリークとかするんじゃないかな
        self.videoReward?.delegate = nil;
        self.videoReward = nil;
    }
}

extension ViewController: AdstirVideoRewardDelegate {

    // 動画の読み込み完了イベントを受け取ります
    func adstirVideoRewardDidLoad(videoReward: AdstirVideoReward!) {
        self.didLoadMovieReward = true
    }

    // 動画の再生準備に失敗した際に呼び出されます
    func adstirVideoReward(videoReward: AdstirVideoReward!, didFailToLoadWithError error: NSError!) {
        self.didLoadMovieReward = true
    }

    // 動画の再生に失敗した際に呼び出されます
    func adstirVideoReward(_ videoReward: AdstirVideoReward, didFailToPlaybackWithError error: Error) {
        // loadはできたけどshowに失敗した場合
        // 再度Showを叩いてみたりしてもだめだったら一旦諦めたほうがいいかも
    }

    // 動画のインセンティブ付与の完了イベントを受け取ります
    func adstirVideoRewardDidComplete(videoReward: AdstirVideoReward!) {
        // 再生完了!
    }

    // 動画画面を閉じた時に呼ばれます
    func adstirVideoRewardDidClose(videoReward: AdstirVideoReward!) {
        // 動画リワードを閉じます
    }
}

注意点

  • 動画リワードのViewはpresentされて出てくるので、他にprsentしている要素があると競合して表示されないことがあります。

まとめ

後は各々の仕様にあわせて良い感じに実装してください

0
0
0

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
0
0