2015年3月21日土曜日

Androidアプリのレーティングのアンケートに答えてみた

SYSTEM_KDです。

先日、AndroidアプリというかGoogle Playに年齢に基づくレーティングが導入されるということが発表され、簡単に記事へまとめたのですが、その中で週末にでもアンケートに答えてみると宣言したので、アンケートに答えてみました。

コンテンツレーティングのアンケート

では、さっそく。

まずは、IARCからの通知に使用するアドレスを入力します。

(普通にgmailのアドレスを設定しました)

次に、アプリのカテゴリを選択します。

レーティング

今回は、「ゲーム」アプリで試してみましたので、「ゲーム」を選択。

次に、アンケートに「はい」「いいえ」で答えていきます。

アンケート

ゲームの場合は、下記の様な設問になってました。

[暴力]
暴力を連想させるもの、それに関する情報、描写がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[恐怖]
恐怖を感じさせる可能性がある画像や音がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[性]
性、性的暴力、挑発、際どい衣装、ヌードなどを連想させるもの、それらに関する情報、描写がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[ギャンブル]
カジノ、賭博場、競馬場などで通常行われている賭けやギャンブルを模擬的に体験できる要素がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[言語]
攻撃的な可能性のある言葉がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[規制項目]
薬物、アルコール、タバコの使用やそれらに関する情報がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[下品なジョーク]
面白くするために、げっぷ、おなら、嘔吐などの身体機能の表現がゲームに含まれていますか?ユーザーが生成するコンテンツはこの質問の対象外です。

[その他]
・このゲームのユーザーは、他のユーザーと交流したりコンテンツを交換したりできますか?

・このゲームでは、ユーザーから提供された個人情報を第三者と共有しますか?

・このゲームでは、ユーザーの現在地を他のユーザーと共有しますか?

・ユーザーはゲームを通じてデジタル商品を購入できますか?

・ナチスのシンボル、情報、プロパガンダがゲームに含まれていますか?

・犯罪行為の手法に関する詳しい説明がゲームに含まれていますか?

・このゲームはテロ活動の実行を奨励していますか?

 

今回アンケートに答えたアプリの場合は、特に該当する項目がありませんでしたので、全て「いいえ」になりました。

設問に答えたら、最後に「アンケートを保存」し「レーティングを算定」ボタンで算定を行います。

 

レーティング算出結果

肝心の結果ですが、算定ボタンを押してからすぐに算出されました。

result

結果は、3歳以上。

ゲームの難易度はさておき、特に年齢制限を設ける必要があるような表現はないので、全年齢対象のような状態になりました。

一応、注意事項として、

上記の算出されたレーティングは、Google Play ストアでユーザーに表示されるレーティングとは異なる場合があります。

と表記されておりましたので、算出したレーティングが確実に実際のレーティングとはならないかもしれないようです。
(実際の結果は、メールで届くのだろうかな?)

何はともあれ、コンテンツのレーティングを設定するのは、特に開発者の負担にならないようです。

2015年3月18日水曜日

Androidアプリに関する新しいレーティングシステムについて

SYSTEM_KDです。

Google さんが、Google Playに新しい評価システムを導入するということで、ちょっとまとめ。

何が追加されるのか?

いったい何が追加されるの??と言ったところですが、どうやら年齢に基づく評価システムが導入される様です。

開発者向けに同内容についてのメールが届いておりましたので、一部抜粋。

Google では、ユーザーが Google Play で十分な情報に基づいて購入できるよう、業界の成功事例を採用し、アプリとゲームに年齢に基づく新しいレーティング システムを導入いたします。このシステムにより、ユーザーに対して各地域に応じたわかりやすいコンテンツのレーティングを簡単に伝えられるほか、コンテンツに適したユーザーをターゲットとすることで、アプリのエンゲージメントを向上させることができます

 

どうやって評価してもらえば良いのか?

推奨年齢みたいな区分で分かれるような雰囲気は分かったけど、実際どうやって評価してもらうの?

といったところですが、

開発者は、アプリごとにアンケートに答えれば良いようです。

メールには、以下の様に書かれておりますので、

アプリのアンケートには、アプリが適切なユーザーにとって見つけやすくなるように、正確な回答を記入してください。一度アプリのレーティングを取得すれば、レーティングに影響する形でアプリのコンテンツを変更するような更新を行わない限り、アプリのアンケートにもう一度回答する必要はありません。

アプリを更新する際に都度都度回答するのではなく、

・新しいアプリを公開する場合
・アンケートの回答内容に影響するような変更を加えて更新する場合
・既存のアプリ(アンケートに回答してないもの)

について、回答を行うようです。

アンケートですので、ある程度開発者の回答に委ねられている部分があるとは思いますが、偽った回答を行った場合は、アプリが公開停止、または削除されることがあるようです。

なお、さらなる詳細については、ここを参照して下さいとのことです。

 

いつから導入されるのか?

では実際いつから導入されるのか?ですが、5月以降から導入されるようですので、既存のアプリについては、それまでに回答しておいた方が良いようです。

 

アンケート内容について

実際のアンケート内容については、週末ぐらいにまとめたいと思いますが、さわりだけ見てみると、こんな感じみたいです。

レーティング

 

以上、簡単にでしたが、Androidアプリに関する新しいレーティングシステムの追加についてでした。

2015年3月14日土曜日

[Android]ToolbarでSpinnerを利用する

SYSTEM_KDです。

前回(と言っても結構前になりますが)、「ToolbarでSerchViewを利用する方法」を書いたのですが、今回は「Spinnerを利用する方法」についてまとめたいと思います。

単にToolbarへSpinnerを追加するだけであれば、わりと簡単にできたのですが、ちょっと文字の色を変更しようとしただけで、一筋縄ではいかなくなりました。。

前置きはこれくらいにしておいて、実際どうやるかというと、一言で言うと「Google I/O 2014」のソースを参考に実装となります。

必要なファイル

[javaファイル]
・Spinner用のAdapter

[Resourceファイル]
・Toolbar上で表示されるSpinnerのレイアウト

・Toolbar上で表示されるSpinnerの中身のレイアウト

・Spinnerをドロップダウンした際のレイアウト

・Spinner用のStyle

 

完成形

ちなみに今回の完成形は↓こんな感じです。

image

※SerchViewは前回の記事を参照ください

 

実装方法

さっそく実装ですが、まずは「Resourceファイル」から実装してみます。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent">

<Spinner style="@style/toolbarSpinnerStyle"
android:id="@+id/actionbar_spinner"
android:layout_width="wrap_content"
android:layout_height="match_parent" />

</LinearLayout>

Toolbar(アクションバー部分)へ表示するSpinnerのレイアウトになります。
単に、Spinnerを設定してるだけですね。


専用に「Style」を設定していますので、合わせてStyleを追加します。

<style name="toolbarSpinnerStyle" parent="Widget.AppCompat.Light.Spinner.DropDown.ActionBar">
<item name="android:background">?android:selectableItemBackground</item>
<item name="android:dropDownSelector">?android:selectableItemBackground</item>
<item name="android:divider">@null</item>
<item name="android:dividerHeight">0dp</item>
<item name="overlapAnchor">true</item>
</style>

ついでに、レイアウトのサイズなどの追加も書いておきます。

<!--Toolbar Spinner-->
<dimen name="explore_dropdown_item_height">48dp</dimen>
<dimen name="explore_spinner_width">200dp</dimen>
<dimen name="spinner_left_padding">16dp</dimen>
<dimen name="text_size_large">18sp</dimen>

次は、Spinnerの中身部分です。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="@dimen/explore_spinner_width"
android:layout_height="wrap_content">

<TextView
android:id="@android:id/text1"
android:paddingLeft="@dimen/spinner_left_padding"
android:paddingRight="4dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="#ffffffff"
android:textSize="@dimen/text_size_large"
android:textStyle="bold"
android:drawablePadding="4dp"
android:drawableRight="@drawable/abc_spinner_mtrl_am_alpha" />

</LinearLayout>


どんどん行きます。
続いて、Spinnerをドロップダウンした際のレイアウトです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@android:id/text1"
android:layout_height="@dimen/explore_dropdown_item_height"
android:layout_width="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:drawablePadding="8dp"
android:gravity="center_vertical|start"
android:textSize="16sp" />
</LinearLayout>

Resourceファイル部分は以上になります。


次はこのResourceファイルを実際に組み込んでいくSpinner用のAdapter部分です。ちょっと長くなります。

import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

/**
* Created by systemkd on 2015/02/28.
*/
public class ExploreSpinnerAdapter extends BaseAdapter {

private Activity mActivity;

public ExploreSpinnerAdapter(Activity activity) {
mActivity = activity;
}

private ArrayList<String> mItems = new ArrayList<>();

public void addItem(String msg) {
mItems.add(msg);
}

@Override
public int getCount() {
return mItems.size();
}

@Override
public Object getItem(int position) {
return mItems.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getDropDownView(int position, View view, ViewGroup parent) {
if (view == null || !view.getTag().toString().equals("DROPDOWN")) {
view = mActivity.getLayoutInflater().inflate(R.layout.explore_spinner_item_dropdown,
parent, false);
view.setTag("DROPDOWN");
}

TextView textView = (TextView)view.findViewById(android.R.id.text1);
textView.setText(getTitle(position));

return view;
}

@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null || !view.getTag().toString().equals("NON_DROPDOWN")) {
view = mActivity.getLayoutInflater().inflate(
R.layout.explore_spinner_item_actionbar,
parent, false);
view.setTag("NON_DROPDOWN");
}
TextView textView = (TextView) view.findViewById(android.R.id.text1);
textView.setText(getTitle(position));
return view;
}

private String getTitle(int position) {
return position >= 0 && position < mItems.size() ? mItems.get(position) : "";
}

@Override
public int getItemViewType(int position) {
return 0;
}

@Override
public int getViewTypeCount() {
return 1;
}

@Override
public boolean areAllItemsEnabled() {
return false;
}
}

最後に、このAdapterをToolbarへ設定します。

private Toolbar toolbar;
private Spinner spinner;
private ExploreSpinnerAdapter spinnerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Toolbar toolbar = (Toolbar)findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);

View spinnerContainer = LayoutInflater.from(this).inflate(R.layout.actionbar_spinner, toolbar, false);
ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
toolbar.addView(spinnerContainer, lp);

spinnerAdapter = new ExploreSpinnerAdapter(this);
spinnerAdapter.addItem("選択1");
spinnerAdapter.addItem("選択2");
spinnerAdapter.addItem("選択3");

spinner = (Spinner) spinnerContainer.findViewById(R.id.actionbar_spinner);
spinner.setAdapter(spinnerAdapter);

}

関係ない部分は、ちょいちょい端折っていますが、だいたいこんな感じで、ToolbarのSpinnerを追加して、文字の色を変えたり、ドロップダウン時のレイアウトを変更したりできると思います。


詳しく知りたい方は、「Google I/O 2014」のソースを見てみるのがよいかと思います。m(_ _)m