2015年4月5日日曜日

GoogleがGoogle Playで映画1本プレゼントキャンペーンやってる模様?

SYSTEM_KDです。

先日、Google Playで使える500円コードをプレゼントしていましたが、今度は「映画1本プレゼント」を行っているようです。

有効期限は、2015年 4月 11日とのことです。

gp

映画プレゼントしてもらいたい!という方は、「Google Playからのニュースと特典の最新情報を希望」すれば受け取れる?かも?
(いやさすがに、後からは無理かな・・・ ^^;)

 

ちなみに、最新のニュースやクーポンを受け取る設定をする方法は、PCにて「Google Play」サイトへアクセスして、右上の「歯車」マークをクリックして、「設定」を選択すれば、下記のチェックボックスが表示されるので、チェックを入れればOKです。

gp_setting

 

実際のところ、後からチェック入れて、既に送付されているクーポンを追っかけで受け取れるかは不明ですが、何円以上の場合に使えるクーポンなどではなく、無料だったり、500円配布だったり、かなり太っ腹なお得情報の様ですので、チェックしておいた方がお得そうですね。

2015年4月4日土曜日

試行錯誤しながらEC-CUBEでECサイトを構築した方向けのセキュリティアドバイス

SYSTEM_KDです。

久々のEC-CUBEネタですが、「脆弱性が発見された」だの「個人情報が流出された」だのなかなか恐ろしいニュースを目にする機会が増えてきているかと思いますが、あなたのECサイトは大丈夫ですか? と言う話です。

ほとんどの方が専門の業者さんへECサイトの構築依頼をされているかと思いますが、中にはご自身でネットを見ながらEC-CUBEを構築してみましたと言う方がいらっしゃるかと思います。

上記の様な方は、構築を専属で行っている方ではないので、セキュリティなどの部分にそんなに精通していないのではないかと思います。
EC-CUBEは、オープンソースなので、ネットや本を見ながら簡単にECサイトが構築できてしまうEC-CUBEのちょっと恐ろしい点かと思います。

前置きはさておき、EC-CUBEで構築したECサイトでお客さんの個人情報を扱う上で、最小限これは見ておいた方が良いのではないかと思う部分を、一言アドバイス程度で、上げたいと思います。

 

脆弱性のパッチ適用確認

人が作ったソフトウェアには必ず脆弱性(セキュリティ上の不具合)が存在しますし、もちろんEC-CUBEも例外ではありません。

それを修正する方法が公式サイトのこのページで公開されておりますので、自分で構築を行われた方は、注意して確認を行い、導入しているEC-CUBEで脆弱性パッチが公開された場合は、適用を行うようにしてください。

 

サーバでの構築方法についての確認

EC-CUBEでサイトを構築した際に、レンタルサーバを借りて、ああでもないこうでもないと、試行錯誤しながらインストールされた方は、気をつけておくべき点になります。

EC-CUBEで構築した、ご自身のECサイトにアクセスする際、

http://ドメイン/data/

でエラーが発生せず真っ白いページにアクセスできるようになっていませんか?

アクセスできる場合は、要注意(というかアウト)です。

その状態は、本来公開を行ってはいけない「data」フォルダが公開状態になっております。

具体的に何がまずいかと言いますと、data/logs の配下へEC-CUBEのログが出力されておりますが、このログ内容がインタネット上で公開されている状態です。

まれに、ログへ個人情報が出力されている場合がありますので、早急に必要な対策を施して下さい。

 

出力されているログの内容について

ログ情報つながりなのですが、クレジットカードを利用できるようにするため、決済モジュールを導入されている方は、確認した方が良い部分になります。

先程も、記述しました通り、EC-CUBEのログは基本的に data/logs に出力されるようになっているのですが、決済モジュールのログ情報も基本的には、この場所へ出力されるようになっております。

決済モジュールには導入の手助け用(開発者用)として、画面で入力された情報をログへ出力するような機能を有している場合があります。

試行錯誤しながら決済モジュールを導入された場合などは、この開発者モードをONにしたまま忘れてしまっていることがあるかもしれません。

その場合は、ログへカード番号、有効期限、名義人名等々が出力され、まさにEC-CUBE上でカード情報を暗号化なしの状態で保持してしまっている状態になります。

万が一、不正アクセスをされた日には目もあてられませんので、早急に対策を施す必要があります。

 

まとめ

簡単ではありますが、セキュリティ関連でのアドバイスになります。

ネットの情報をもとに、自力でECサイトを構築することができる、状態にありますが、セキュリティ関連にはしっかりと気を配りたいところですね。

まぁ心配になった方は、専門の業者に聞いてみるのが一番ですね。

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