Google Interstitial(インタースティシャル)広告の今どきの実装方法はどこに

さあ、そんな広告を実装しようと思いました。

Interstitials_-_Google_Mobile_Ads_SDK_—_Google_Developers

とりあえず、ぐぐろうとします。

頭悪いので、そこでまず悩みます。

「Google」なのか「Admob」なのか

「インタースティシャル」なのか「インターステイシャル」なのか

「interstatial」なのか「interstitial」なのか

「GooglePlaySDK(gms)」同梱なのか、別SDKなのか。

とりあえず、こんなこまかいことは Google検索に考えてもらうとして

これら単語をやみくもに入力、検索して実装説明方法を探します。

それらしいのがみつかりました。

import com.google.android.gms.ads.doubleclick.*;

public class InterstitialExample extends Activity {

  private PublisherInterstitialAd interstitial;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create the interstitial.
    interstitial = new PublisherInterstitialAd(this);
    interstitial.setAdUnitId(MY_AD_UNIT_ID);

    // Create ad request.
    PublisherAdRequest adRequest = new PublisherAdRequest.Builder().build();

    // Begin loading your interstitial.
    interstitial.loadAd(adRequest);

  }

  // Invoke displayInterstitial() when you are ready to display an interstitial.
  public void displayInterstitial() {
    if (interstitial.isLoaded()) {
      interstitial.show();
    }
  }
}

DoubleClick for Publishers (DFP) Interstitial Ads - Google Mobile Ads SDK — Google Developers

が、動きません。Admobの上位の「DFP」なるしくみのようです。

で次。

import com.google.ads.*;

public class BannerExample extends Activity {
  private InterstitialAd interstitial;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // インタースティシャルを作成する
    interstitial = new InterstitialAd(this, MY_INTERSTITIAL_UNIT_ID);

    // 広告リクエストを作成する
    AdRequest adRequest = new AdRequest();
    // インタースティシャルの読み込みを開始する
    interstitial.loadAd(adRequest);
  }
}

Google AdMob Ads Android(上級) - Google Mobile Ads SDK — Google Developers

これもダメです。

最新の「GooglePlay SDK(gms)」の実装ではなく、古いAdmobSDKの実装方法のようです。

で、次。

続きを読む >>


android の static 変数 が気持ち悪い

Android_Application_Framework_FAQ___Android_Developers

整理してメモ。

2つの状況。

その1:

static 変数がプロセスに保持されている。

プロセスが生きたままだとと思っていたら死んでいる。

そのアプリを画面に表示したときにプロセス再起動。

static 変数が初期化される。

その2:

static 変数がプロセスに保持されている。

プロセスが死んでいると思ったら生きている。

そのアプリを画面に表示したときに既存プロセス利用。

static 変数は初期化されず、そのまま利用される。

結局、アプリの画面を表示したときにそれが

「再起動されたプロセス(static変数初期化)」なのか
「再利用されたプロセス(保持されたstatic変数)」なのか

をはっきり認識しづらいのが問題。

めんどくさいので雑にいうと

その表示した画面が

「アプリ全体を新しく起動した画面」なのか
「一部しれっと生きてた情報を再利用した画面」なのか

と思ったほうが簡単で直感的なのか。

細かくいうといろいろあるのだろうけども。

極端に、

「アプリプロセスはいつでも死ぬ可能性がある」

ということにしておいて、消えて困る情報はアプリプロセス以外の
場所に保持しておくとよし、と。

Preference・データベース・ファイル…

(singleton がどうのこうのはアプリプロセスあっての)

なんで「static変数」がよく問題になるのかは、AndroidなJava 以外のように

「異なるライフサイクルを持つクラス間で、アプリ内で見通しよく簡単に情報を持ち回りたい」

から。

これには「Applicationクラス」を使う、と。

Applicationクラスを継承して、データの共有をする。 « Tech Booster

AndroidアプリでContextを持ち回したい話 - FLYING

MyAppのstatic変数を使うことで、アクティビティのライフサイクルに影響を受けずに値を保持し続けることができます。
またstaticメソッドを用意することで、アプリ内のどこからでもアクセスすることができます。

各オブジェクトの状態をアプリから監視させたり。

Android - Applicationクラスを使ってObserverパターンを実装する - Qiita

念のためそこら公式ドキュメントをみる。

続きを読む >>


テレビにAndroid端末の画面を動画で飛ばすの巻

ChromecastへのAndroid画面ミラーリングデモ公開、AllCast_アプリに導入へ_-_Engadget_Japanese

ChromecastへのAndroid画面ミラーリングデモ公開、AllCast アプリに導入へ - Engadget Japanese ChromecastへのAndroid画面ミラーリングデモ公開、AllCast アプリに導入へ - Engadget Japanese

あたしは、Chromecast を持っておりますが。

Miracast のような無線映像転送とは異なり、アプリから指示されたメディアを Chromecast (の中身である簡易版 Chromeブラウザ) が直接ネットにアクセスして表示する仕組みです。このため、Googleによる説明も「お気に入りのオンライン・エンターテインメントをテレビで観るための製品」。
Chromecast はホーム画面のミラーリングや非対応アプリの画面出力には(正式には) 対応していません。

ということで、Android端末をホストとしての画面をリアルタイムでテレビ画面に表示することはできません。

が、技術的にはできるという話。

Koushik Dutta 氏が公開したデモでは、Androidスマートフォン側をホストとしてChromecast にアクセスさせることでホーム画面ストリーミング表示を実現します。

きれいに「Flappy bird」がテレビに表示されています。

で、こんなかんじでできるのではないかと。

続きを読む >>