スマホブラウザでガジェ通みてたら、こんな。

警告! 携帯電話がウィルスに感染しています!
ウィルスがデータを汚染してしまいます。
以下の案内に従ってウィルスを削除してください。
ガジェット通信さんは関係ないのだろうと思います。
もうね、広告屋さんたちどうにかしてください!!
てか、これは、だれがどうすればいいのだろうかっ!!
スマホブラウザでガジェ通みてたら、こんな。

警告! 携帯電話がウィルスに感染しています!
ウィルスがデータを汚染してしまいます。
以下の案内に従ってウィルスを削除してください。
ガジェット通信さんは関係ないのだろうと思います。
もうね、広告屋さんたちどうにかしてください!!
てか、これは、だれがどうすればいいのだろうかっ!!
こんな記事がありまして、Googleのアカウントって他人に知られたらほんとやばいよなあ、とまず。
「ウェブ履歴」で思考・興味が丸裸になる
「ロケーション履歴」でおおよその行動履歴がモロバレに
すべてのGoogleユーザが知っておくべき2つの機能とパスワード管理の重要性 | アプリオ
Google ウェブ履歴
https://history.google.com/history/

Googleロケーション履歴
https://maps.google.com/locationhistory/

で、マカフィーからこんな情報がでてます。
重要な確認処理が省略されたほぼ自動的な方法でGoogle Playから他のアプリのダウンロード、インストールおよび起動を行う危険な国内ユーザー向けアプリをGoogle Play上で確認しました。
端末上のGoogleアカウント情報を取得し、そのアカウントを用いてGoogleサービスへアクセスする権限をユーザーに要求します。
アプリはその認可トークンを用いてGoogle PlayストアのWebサーバーと何度か非公式な方法でのHTTP通信を行います。
この自動インストールでは、アプリ説明の閲覧や権限要求の確認と許可・拒否を行う機会がユーザーに与えられません。
要するに
「すべての権限の確認をユーザにさせることなく勝手にアプリをインストールして起動できる」
ということになるのでしょうか。
防ぐ方法としては、
この自動インストールは、ユーザーがアプリに対し「端末でアカウントを検索」(GET_ACCOUNTS)と「端末上のアカウントを使用」(USE_CREDENTIALS)という権限要求をインストール時に許可することで可能となります。
ということなので、
実行時に表示されるGoogleアカウントのSIDおよびLSIDに対する権限要求画面上でそれを拒否すること
ということしかないようです。
マカフィー株式会社 | McAfee Blog -Google Playからアプリ自動インストールを行う危険な国内向けAndroidアプリ
この2つのパーミッション
GET_ACCOUNTS
USE_CREDENTIALS
ほとんどの人が気にしてないような気がします。
実際、あたしの今現在の端末の状況を確認してみました。
あちこちでいわれてるけども。
容量が十分に残っているAndroid端末に「警告! 容量が不足しています」などと表示し、クリーンアップアプリのインストールを促す広告に「悪質だ」との批判が相次ぎ、このアプリを公開しているキングソフトが釈明をWebサイトに掲載した。
キングソフト、「警告」ポップアップの悪質広告を釈明 「悪質業者によるものが意図せず配信」 - ライブドアニュース
これですよね。

あたしは、Chromeを使っていますが、それの機能「ポップアップブロック」では防げなかったです。
で、このダイアログに表示されてるドメイン「ib.abnx.com」はシマンテックのページにも記載されていたりします。

この脅威は、Web エクスプロイトパックからドライブバイダウンロードを介して侵入先のコンピュータに届く可能性があります。
その他にもあちこちに。
ib.adnxs.comの広告がサイトに頻繁に表示されます。
検索エンジン設定が変えられてしまったり、拡張機能、プラグインが勝手に入っていたりする事例がある
FC2で「ib.adnxs.comを待機しています」と出てChromeがフリーズ [ おやっ?何か届いたようです。~公開メモ帳2冊目~ ]
Windowsパソコン向けの情報が多いですが怪しいのは間違いないようです。
広告表示までの多段なリダイレクトとか、グレーな原発労働者やIT系多重派遣にも似た「複数の業者を経由」てのが問題なのだろうかしら。
さあ、そんな広告を実装しようと思いました。

とりあえず、ぐぐろうとします。
頭悪いので、そこでまず悩みます。
「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の実装方法のようです。
で、次。

整理してメモ。
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
念のためそこら公式ドキュメントをみる。