AdMobコンテンツの一部が広告に重なっている

Google Play Store に公開しているアプリに対しAdMobから「プログラムポリシーに準拠していない・・・」旨のメールが届きました。

コンテンツの一部が広告に重なっているとのことですが、広告自体はまともに表示されているので、どのように修正すれば良いのか解りませんでした。

複数のアプリを公開していて、今までこのようなことは無かったので、他のアプリとのレイアウトの違いを比べたうえで、ようやく理解することが出来ました。

冷静になって考えてみれば解ることなのですが、原因はFrameLayoutによるものでした。

というより私自身のFrameLayoutに対する理解が足りなかったのが原因です。

私はアプリ画面の背景に画像をいっぱいに表示させるためレイアウトファイルの一番最初にImageViewを置き、Width、Height 共にmatch_parent、scaleTypeをcenterCropで画像を縦横比を維持したままセンターに配置し、その後にFrameLayout、FrameLayoutの中にLinearLayoutをvertical指定で置き、各UIパーツを縦並びで配置しました。

広告のAdViewはFrameLayoutの後に置いていました。

要するに広告の上にFrameLayoutのレイヤーが重なっていて、視覚的には広告が見えてはいるものFrameLayoutのレイヤーが邪魔をして広告をタップしても反応しない状態になっていたのです。

自身で広告をタップする行為はタブーの概念が邪魔をして気づけなかったのもあります。

テスト広告を使ってタップしてみればすぐに気づけた筈です。

AdViewに関してはandroid:layout_centerHorizontal=”true” と android:layout_alignParentBottom=”true” を指定していれば画面下部に表示してくれるので、おざなり状態にしていたのも、うかつでした。

結局、FrameLayoutにapp:layout_constraintBottom_toTopOf=”@+id/adView” を追加し、FrameLayoutがAdViewに重ならないようにして再審査をリクエストしたら「お客様のアプリの審査が完了いたしましたが、ポリシー違反は発見されませんでした。 」となったので良かったのですが、重なりは重なりでもレイヤーの重なりだとはすぐに気づきませんでした。

背景画像はbackgroundで表示させることも出来ますが、どうしても画像の縦横比を維持したまま表示させたかったのでImageViewの上にFrameLayoutで各パーツを載せていく方法を取りました。

今更ながらですが、AdView自体もFrameLayout内のLinearLayoutで表示させるべきだったかと思っています。

Windows 間でSSH 通信を行う

Windows 間でSSH 通信を行うための手順

現在 OpenSSHクライアントとOpenSSH サーバー機能はデフォルトで利用可能です。

Windows起動に連動してOpenSSHクライアントとOpenSSH サーバーを起動させたいなら[サービス]で「OpenSSH Authentication Agent」と「OpenSSH SSH Server」のスタートアップの種類を「自動」、若しくは「自動(遅延開始)」に設定する必要があります。

コマンドプロンプトで相手側コンピューターに接続を試みる

相手側コンピューターのユーザー名とIアドレスかホスト名(コンピューター名)、ログインパスワードが判っているのが前提となります。

ssh 相手側ユーザー名@相手側コンピュータ名

フィンガープリントの受け入れを聞いてくるので yes → Enter

パスワードを聞いてくるのでパスワード入力 → Enter で、接続先のユーザーディレクトリに切り替わったら、パスワード認証による接続は OK

この時点で接続元コンピューターのユーザーフォルダに .ssh フォルダが作成され、中に ホスト情報が記述された known_hosts ファイルが作成られます。

これらを接続し合うコンピューターすべてで行います。

公開鍵認証の設定

これにより面倒なパスワード入力が省略できるようになります。

一連の作業はコマンドプロンプトか PowerShell で行います。

id_rsa(秘密キー)とid_rsa.pub(公開キー)の作成

下記コマンドでid_rsa(秘密キー)とid_rsa.pub(公開キー)が作成されます。

ssh-keygen

下記のようにキーファイルの作成場所のパスが表示されます。

C:\/Users/ユーザー名/id_rsa

接続するコンピューターが1台だけならそのままEnterで構わないが複数のコンピューターと接続したいなら、
自分のコンピューターだと識別しやすい固有のキーファイル名にしたほうが無難です。

任意のファイル名を含めたパスを入力してEnter。

C:\/Users/ユーザー名/pc1_rsa

上の例だとC:\/Users/ユーザー名/.ssh/ にpc1_rsaとpc1_rsa_pub というファイルが作成されます。

.sshディレクトリに移動

cd .ssh

中身を確認します。

dir

pc1_rsa(秘密キー) と pc1_rsa.pub(公開キー) が作成されていることを確認したらキーエージェントに秘密キーを追加します。

ssh-add pc1_rsa

これらの操作を接続し合うコンピューターすべてで行います。

接続先コンピューターに pc1_rsa.pub を転送

scp pc1_rsa.pub ユーザー名@コンピューター名:.ssh

接続先コンピューター側で届いている id_rsa.pub の中身を authorized_keys に追加。

type pc1_rsa.pub >> authorized_keys

authorized_keys が存在しない場合、自動的に作成されます。

接続の簡略化

接続を試みる側の C:\Users/ユーザー名/.ssh/ に下記内容の config ファイルを置きます。

Host pc2 // (接続名(任意))
HostName コンピューター2 // (接続先のコンピューター名)
User pc2 // (接続先のユーザー名)
Port 22 // (接続に使用するポート番号)
IdentityFile ~/.ssh/pc1_rsa // (接続を試みる側の秘密キーまでのパス)

これで次回から下記コマンドで接続することができます。

ssh pc2

既存の秘密キーから公開キーを作成

誤って公開キーを削除してしまった時などは秘密キーを基に公開キーを作り直すことができます。

ssh-keygen -y -f pc1_rsa > pc1_rsa.pub

Linux解凍、圧縮コマンド

現在の tar には自動判別機能が備わっているのでオプションに z や J 、j は不要

解凍コマンド

tar.gzファイルの解凍

tar xfv archive.tar.gz

tar.bz2ファイルの解凍

tar xfv archive.tar.bz2

圧縮コマンド

file1とfile2をアーカイブし、圧縮して mix.tar.gz ファイルにする

tar cfv mix.tar.gz file1 file2

file1とfile2をアーカイブし、圧縮して mix.tar.bz2 ファイルにする

tar cfv mix.tar.bz2 file1 file2

zipファイルの解凍コマンド

unzip ファイル名.zip

zipによる圧縮(アーカイブ可)

zip ファイル名.zip ファイル名

gzipによる圧縮(アーカイブ不可)

gzip ファイル名

gzファイルの解凍コマンド

gzip -d ファイル名.gz

bzip2による圧縮(アーカイブ不可)

bzip2 ファイル名

bz2ファイルの解凍コマンド

bzip2 -d ファイル名.bz2

応用編

データベースのダンプ時においての圧縮コマンド
データベース1のテーブル1をgzip形式で圧縮してtable1.sql.gzファイルとして出力。

mysqldump -uroot -p データベース1 テーブル1 | gzip > table1.sql.gz

データベース1のテーブル2をbzip2形式で圧縮してtable2.sql.bz2ファイルとして出力。

mysqldump -uroot -p データベース1 テーブル2 | bzip2 > table2.sql.bz2