2015年7月10日金曜日

【スマフォアプリマネタイズ】Unity Ads ミートアップ in 大阪 に参加してきた


7/8に大阪で開催されたUnityAdsの勉強会に参加してきました。

【スマフォアプリマネタイズ】Unity Ads ミートアップ #4 in 大阪

UnityAdsミートアップって集まりは毎月東京でやってるらしいです。
今回はたまたま関西での開催だった模様。

到着〜勉強会開始まで

19:45頃に到着したときには15人ぐらいいたかな?
遅刻だと思って急いで来たけどみんな唐揚げ食べてた。
ちゃんとタイムテーブル見てみると20:30開始、19:30は乾杯だったw
タイムテーブル

数人知り合いがいたのでとりあえずビールで乾杯。
唐揚げとピザを食べながらビール。しかも無料。なんて幸せな・・・

20:30頃、Lサイズのピザ3枚が届いたのと同時に勉強会開始。
始まる頃にはみんなお腹いっぱい

20:30〜 Unity Ads トレンドのご案内

Unityジャパン松井さんの発表。
UnityAdsはこんなものですよ〜とか。
どういうアプリに実装されてますよ〜。みたいな紹介。

導入アプリの数や広告数、フィルレート、eCPMとかふむふむって聞いてた。
ところどころの数字は喋っちゃダメって言ってたから伏せとく。
(どこがダメだったかは酔っ払ってて覚えてない)

導入数に関して言うと今年頭からすでに2倍以上になってるらしい。

あとは代表的な広告の表示方法の紹介とか。

代表的な広告表示方法

UnityAdsは動画広告のみなので表示するタイミングが重要。
ざっくりと4種類紹介された。

アイテムプレゼント型

動画みたらアイテムあげるよ!的なあれ。
見るか見ないかユーザーが選べるしいいよね。最近増えてるのも納得。
コンバージョン、eCPM共に高い。

強制表示型

定期的に強制表示されるやつ。かなりうっとうしい。
5秒でスキップできる場合が多いけどそれでもイライラしちゃう。
コンバージョンは並、eCPMは高い。

コンティニュー型

動画みたらもう一度コンティニューさせてあげるよってやつ。
毎回じゃなくハイスコアに届きそうなときとか、ユーザーが悔しい思いをしたときに出すと効果的らしい。たしかに。広告じゃないけどツムツムとかそうやね。
コンバージョンやや高い、eCPMは高い。

ゲーム開始前表示型

開始前に見ると強くてニューゲームできるよ。みたいな。
今からこのゲームを遊ぶ!ってときに出すから効果は低いらしい。
コンバージョン、eCPM共に低い。

Unityを信じて!

この言葉が印象的だったw
効果の高い広告が出やすいように自動的に最適化されていくから2〜3ヶ月は変にいじらず使ってみて。って言ってた。
いじるってブラックリストやホワイトリストで表示する広告をカスタマイズすることね。

21:15~ Unityのアプリに動画広告を実装するには

続いて鎌田さんの発表。
ソースコード見せながらこんな感じで実装できますって紹介。

実装方法

1.UnityAdsのアセットをインポート

※Unity5.2からはUnityAdsが標準ライブラリに含まれるみたいで、アセットのインポートは不要になるらしい。

2.実装する

コードはこれだけ。
using UnityEngine.Advertisements;
public class UnityAdsTest : MonoBehaviour
{
   void Start()
   {
   if(Advertisement.isSupported && Advertisement.isInitialized)
     {
      Advertisement.Initialize("gameID");
     }
   }

   public void ShowAds()
   {
      if( Advertisement.isReady())
      {
        Advertisement.Show();
      }
   }
}
あら簡単。

このままゴリゴリ書き進めてもいいけど
完了・中断とかのコールバック実装やiOS、Android両対応とか
ちょっと踏み込むとだんだん面倒になってくる。(らしい)

次はそれを解決できるヘルパーの紹介。

もっと楽な実装方法

Unity Ads Helper
UnityAdsの実装を超簡単にしてくれるヘルパー。
使い方は上記リンクをみてね。

iOS,AndroidのgameIDを一緒に設定できたり、
OnFinished,OnSkipped,OnFailedとかのコールバックを簡単に実装できたり。
かなり便利そうに見えた。

実装サンプルプロジェクトの紹介

unity-ads-demo
さっきのヘルパーを作ってる人のデモらしい。


動画をみたらコインをプレゼント〜ってありがちな使い方のサンプル。
一度見るとしばらくは「動画を見る」ボタンが押せないクールダウンタイムの実装もされてるので参考にどうぞ。

動画のスキップについて

アイテムプレゼント型の実装だとスキップできない場合が多いよね。
逆に強制表示型だと5秒でスキップみたいなのが多い。

UnityAdsの管理画面からスキップ可否やスキップ可能までの秒数が設定可能だそうな。

UnityAdsの強み

  • eCPMが高い
  • ゲームに特化してる
  • 実装が楽
こんな感じのことを話してた。

Unity5.2以降はアセットの追加すら不要になるみたいだからかなり楽になるね。

まとめ

実装も楽そうだし使ってみましょー。
ゲーム系アプリであれば導入して損はなさそうです。


あと今後はミートアップってことでお肉食べてしゃべる会を目指すらしいですよ。
お肉食べたくなったらUnityの人に連絡しましょう!


Unity系記事まとめ

2015年7月7日火曜日

新ConoHaのオブジェクトストレージ、ダウンロード用一時URL(Temp URL)を試す。

ブラウザからオブジェクトストレージへ直接ファイルアップロードをしたいんだけどブラウザにアクセストークンを渡したくない。
どうにか方法ないかなって調べてたら下記記事を見つけた。

Qiitaの画像アップロード機能も簡単に実装できる。そう、S3ならね。
まさにやりたいことはこれ。でもS3じゃなくてConoHaオブジェクトストレージでやりたい。

調べた。

ConoHaのドキュメントにはForm POSTに関する記述がなかったけど使えないのかな・・・
とりあえず簡単そうな"Temporary URL"を試してみる。

コンテナを作成しファイルをアップロード


"container"ってコンテナを作り、"hello.txt"をアップロードした。
コンテナには何もメタデータを設定していないので、今のところhello.txtは直接GETできない。

トークンの発行

前回の記事と同様にトークンを発行する。
curl -i -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"APIユーザー名","password":"APIユーザーパスワード"},"tenantId":"テナントID"}}' \
https://identity.tyo1.conoha.io/v2.0/tokens

TempURL用のKeyを登録

curl -i -X POST \
-H "Accept: application/json" \
-H "X-Auth-Token: [取得したトークン]" \
-H 'X-Account-Meta-Temp-URL-Key: [セットしたいキー]' \
https://object-storage.tyo1.conoha.io/v1/nc_df3bdbc45bc04950b558834f5728517a
Temporary URL middlewareに4つのキーが必要、みたいに書いてあるけどここでセットしてるのアカウントに対する鍵の1つ目(X-Account-Meta-Temp-URL-Key)っぽいなぁ。1つでいいのかな。残り3つはなんなんやろ。

TempURLを生成するスクリプトを用意

create-tempurl.py
import hmac
from hashlib import sha1
from time import time
method = 'GET'
duration_in_seconds = 60*60*24
expires = int(time() + duration_in_seconds)
path = '/v1/nc_df3bdbc45bc04950b558834f5728517a/container/hello.txt'
key = '[セットしたキー]'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
sig = hmac.new(key, hmac_body, sha1).hexdigest()
s = 'https://{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}'
url = s.format(host='object-storage.tyo1.conoha.io', path=path, sig=sig, expires=expires)
print '%s' % url
pythonにはhmacってライブラリがあるんですなぁ。rubyにもあるのかな。

スクリプト実行

$ python create-tempurl.py 
https://object-storage.tyo1.conoha.io/v1/nc_df3bdbc45bc04950b558834f5728517a/container/hello.txt?temp_url_sig=9775eacc57b95fe57435c8f5d8b6e404a0957930&temp_url_expires=1436284812
こんな感じでURLが返ってくる。
このURLをブラウザで開くとダウンロードされるので一時URLが有効になってるのが確認できた。めでたしめでたし。

とりあえずhmacによる認証ハッシュを生成する方法はわかったので次はFormPOSTを試してみたい。
ConoHaのAPIドキュメントに"Form POST"っぽいものがないけど使えるんだろうか・・・

今日はここまで。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

2015年7月5日日曜日

新ConoHaのオブジェクトストレージにAjaxを使ってアップロードする


前回(新ConoHaのオブジェクトストレージ上のデータをAjaxで取得してみる)の続き。

次はAjaxによるアップロードを試します。

参考サイト

コンテナの準備

アップロード先となるコンテナの準備をする。といっても前回の記事から何も変更なかった。
アップロード先のコンテナ
必要なのはX-Container-Meta-Access-Control-Allow-Originメタデータだけみたい。

サイトの準備

参考サイト4つ目のGitHubのソースを真似てWebページを作った。(http://localhost:3000/ のホストとしてアクセス)
https://github.com/naichilab/cors-swift-example/blob/master/app.js
アップロード処理が書かれてるjsファイル。
URL組み立ててtokenつけてPUTするだけっぽい。

トークンの発行

参考サイト3つ目のConoHaドキュメントを見てみると、トークン発行方法が書かれてる。
ターミナルで下記コマンドを実行してトークンを取得する。
curl -i -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"APIユーザー名","password":"APIユーザーパスワード"},"tenantId":"テナントID"}}' \
https://identity.tyo1.conoha.io/v2.0/tokens
長々としたJSONが返ってくるのでaccess->token->idをメモる。
どうもトークンは一度発行すると24時間有効みたいですね。

アップロード実行

さきほど立ち上げたサイトのフォームに入力していく。

  • StorageURL:ConoHaコントロールパネル->API->Object Storage Serviceエンドポイント
  • StorageToken:さきほどメモしたトークン
  • Container:コンテナ名
こんな感じ

File Selectionのボタンからファイルを選ぶとアップロードが始まる。
アップロード完了


すんなりとアップロードできた。
CyberDuckで確認した。

まとめ

  • ConoHaのAPIユーザーを使ってトークンを発行する。
  • コンテナにX-Auth-Tokenメタデータの設定は不要
あってんのかなこれ・・・


だいぶやりたいことに近づいてきたような気がする。
自分のサーバーでトークンを発行してブラウザに渡す→ブラウザが直接オブジェクトストレージにアップロードって感じでいいのかな。
トークンが24時間有効だしこのままじゃ好きなファイルアップロードできちゃうからもーちょい厳しい認証が必要だよなぁ。
どうしたらいいんかな。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

2015年7月4日土曜日

新ConoHaのオブジェクトストレージ上のデータをAjaxで取得してみる


新ConoHaのオブジェクトストレージネタ、まだまだ続きます。
前回の記事(新ConoHaのオブジェクトストレージにWeb公開可能なコンテナを作成する。)ではオブジェクトストレージにアップロードしたファイルにブラウザから直接アクセスできるようになりました。

今回は同じファイルをAjax(XmlHttpRequest)を使って取得してみます。

クロスドメインリクエストの制限

Ajaxで別ドメインのデータを取得しようとすると制限にひっかかります。
参考:Ajax クロスドメインリクエスト 制約
CORSってのを使うと上記制限を回避できるそうなので試してみます。

CORS(Cross-Origin Resource Sharing)

まだよくわかってませんがXHR(XmlHttpRequest)のクロスドメイン制約を回避する方法らしいです。
新ConoHaのオブジェクトストレージはOpenStackSwiftで実現してるらしくCORSの設定が可能みたい。

参考:CORS

この制限を超えてファイルアップロードするのが目標ですがまずはGetだけできることを確認します。

サイトの用意

参考サイトに書かれた通りのHTMLを出力するページを用意しました。(Rails)
XHRサンプルフォーム
このサイト(http://localhost:3000)からオブジェクトストレージ(https://object-storage.tyo1.conoha.io/)のファイルをAjaxで取得するにはクロスドメイン制約を抜ける必要があります。

取得してみる

前回の記事で用意したコンテナ(X-Container-Read = .r:* を設定したもの)はこんな感じ。
コンテナのメタデータ
通信内容を確認したいのでChromeのDeveloperToolを開き、Networkタブを表示しておく。
※"DisableCache"にチェックを入れておいたほうがいいと思う。これで結構悩んだ。
ChromeのDeveloperTool
CyberDuckでhello.txtのURLをコピーし、フォームに入力してSubmit。
取得(失敗)
DeveloperTool上はステータスコード200が帰ってきてるみたいだけど画面上にはstatus:0が出たまま。
参考サイトによると何かがおかしいらしい。
参考サイトより:Assuming the request succeeds you should see the response header and body. If something went wrong the response status will be 0.
というかオブジェクトストレージ側に何も設定してないんだから取れたら逆に怖い。

コンテナにCORS用のメタタグを設定

コンテナに下記メタタグを設定する。
X-Container-Meta-Access-Control-Allow-Origin: http://localhost:3000
ちなみにCyberDuckでメタタグを編集できた。Swiftクライアントいらなかったんじゃ?
CyberDuckでメタタグ編集
再度取得してみる。
再取得(成功)
とれた。
Responseに”Access-Control-Allow-Origin:http://localhost:3000”が含まれるようになり、ファイルの内容も取得できてるのがわかる。

まとめ

オブジェクトストレージのファイルをAjax(XmlHttpRequest)を使って取得するには下記設定が必要だった。
  • コンテナにX-Container-Readメタデータを設定する。
  • コンテナにX-Container-Meta-Access-Control-Allow-Originメタデータを設定する。

X-Auth-Token is 何?

参考サイトを忠実にやってたんだけど結局X-Auth-Tokenは設定しなくても動いた。
X-Auth-Tokenとはなんなんだろうか・・・
今回はX-Container-Readで誰でも閲覧可能になってるからいらなかったんだろうか。
最終的にはAjaxを使ったファイルアップロードまで実装したいのでそこらへん知る必要があるのかもしれない。

だれか詳しい人教えてください。

さて次に試すのはAjaxによるアップロードかな。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

2015年7月3日金曜日

新ConoHaのオブジェクトストレージにWeb公開可能なコンテナを作成する。

Swiftコマンドラインクライアントで新ConoHaのオブジェクトストレージに接続する。
これの続き。

SwiftコマンドでConoHaのオブジェクトストレージにアクセスできたのでコンテナの設定をしていく。

やりたいこと

コンテナにアップロードしたファイルを認証なしで取得できるようにしたい。
(画像とかをブラウザから認証なしで見れるようにしたい)

参考

Object Storage API v1 (SUPPORTED)
よくわからんけどX-Container-Readってメタデータに.r:*ってのをセットできればいいんかな?

OpenStack SwiftでStatic Webサイトを作る
ググってたら似たようなことしてる記事みつけた。

真似てみる

$ swift post -r '.r:*' hogehoge
これだけでhogehogeコンテナの作成(すでにあれば更新)できるらしい。

確認

コマンドラインで見る方法よくわからんしCyberDuckで見てみる。
それっぽく入ってる。

適当なファイルあげてみる

$ swift upload hogehoge hello.txt 
hogehogeコンテナにhello.txtをアップロード

入った。

ブラウザで見れるかな
URLどうなるんだろうと思ってCyberDuck触ってたらURLコピーする機能あった。便利。

アクセス!

見れたっぽい。
なるほど。Web公開するだけなら簡単やね。

おまけ

コンテナ作成時にメタデータを指定しないと認証エラーしたしちゃんとできてるっぽいかな。

今日はここまで。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

2015年7月2日木曜日

Swiftコマンドラインクライアントで新ConoHaのオブジェクトストレージに接続する。


最近リニューアルした新ConoHa(https://www.conoha.jp/)のオブジェクトストレージを試してます。

公式にはオブジェクトストレージを操作する方法として下記2つが紹介されていました。
・CyberDuck(GUIクライアント)を使う方法
・APIを叩く方法

CyberDuck

GUIクライアントは下記記事の通り接続できました。
新ConoHaのオブジェクトストレージにCyberDuckで接続しようとして401認証エラー
コンテナの作成やファイルのアップロード、ダウンロードは問題なくできるんですがコンテナへの属性追加とか、細かい操作はできないみたい。
やりたいのはそっちなので結局APIを使う方法に切り替えることに。

APIによる操作

APIを操作する方法はCURLを使う方法とSwiftコマンドラインクライアントを使う方法がある(?)っぽいです。(ちゃんと調べてない)
swiftコマンドラインクライアントを使う方が、OpenStackSwiftの操作に適してそうな気がしたのでそっちを先に試してみます。

インストールは下記記事の通り行いました。
ConoHaのオブジェクトストレージを操作するためにOpenStackSwiftのコマンドラインクライアントをインストールする

swiftコマンドラインクライアントによる接続

環境

MacOSX 10.10.3
swift 2.4.0

環境変数ファイルを準備

~/swift_conoha
export OS_AUTH_URL=https://identity.tyo1.conoha.io/v2.0 (認証サーバーのAPIエンドポイント)
export OS_TENANT_NAME=XXXXXXXXXXXX (テナント名)
export OS_USERNAME=XXXXXXXXXXXX (APIユーザー名)
export OS_PASSWORD=XXXXXXXXXXXX (APiユーザーパスワード)

起動確認

$ source ~/swift_conoha 
$ swift stat

Auth versions 2.0 and 3 require python-keystoneclient, install it or use Auth
version 1.0 which requires ST_AUTH, ST_USER, and ST_KEY environment
variables to be set or overridden with -A, -U, or -K.
なんか怒られた。python-keystoneclientが足りない?

python-keystoneclientをインストール

$ sudo pip install python-keystoneclient

再チャレンジ

$ swift stat
                        Account: xx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                     Containers: 1
                        Objects: 1
                          Bytes: 0
Containers in policy "policy-0": 1
   Objects in policy "policy-0": 1
     Bytes in policy "policy-0": 0
               Meta Quota-Bytes: 107374182400
                    X-Timestamp: 1432076457.10619
                     X-Trans-Id: txa813d66137274a32b79f2-0055954ee7
                   Content-Type: text/plain; charset=utf-8
                  Accept-Ranges: bytes
いけたー

とりあえずここまで。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

ConoHaのオブジェクトストレージを操作するためにOpenStackSwiftのコマンドラインクライアントをインストールする

新ConoHaのオブジェクトストレージにも採用されてるらしいOpenStack Swift。
コンテナの属性を触るのにAPI操作が必要そうなのでクライアントをインストールしてみる。
いまいちよくわかってないのでメモしとくけど手順合ってるかは不明。

環境

・OS X Yosemite 10.10.3

参考

OpenStack コマンドラインクライアントのインストール
https://swiftstack.com/docs/integration/python-swiftclient.html

前提ソフトウェアのインストール

Python2.6かそれ以降

OS Xには最初から入ってた。
$ python -V
Python 2.7.6
※けどこのままではswiftクライアントが動かず、Homebrew経由で入れ直した。
$ brew install python
$ python -V
Python 2.7.10

setuptoolsパッケージ

これもOS Xには最初から入ってるらしい。

pipパッケージ

これも書かれてる通りのコマンド実行してみる。
$ sudo easy_install pip
・・・略
Installed /Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip

これでいいのかな。

クライアントのインストール

いろいろクライアントの種類があるみたいだけどオブジェクトストレージだけ操作できればいいからswiftclientってのをインストール。
$ sudo pip install python-swiftclient
・・・略
Successfully installed futures-3.0.3 python-swiftclient-2.4.0 requests-2.7.0 simplejson-3.7.3 six-1.9.0

動かしてみるもエラーで動かない
$ swift
Traceback (most recent call last):
  File "/usr/local/bin/swift", line 7, in <module>
    from swiftclient.shell import main
  File "/Library/Python/2.7/site-packages/swiftclient/shell.py", line 31, in <module>
    from swiftclient.multithreading import OutputManager
  File "/Library/Python/2.7/site-packages/swiftclient/multithreading.py", line 22, in <module>
    from six.moves.queue import PriorityQueue
ImportError: No module named queue
以下のページを発見。
Installing python-swiftclient on OS X Yosemite
どうもMacに最初から入ってるpythonに問題があるらしい。
上記ページの通り、下記コマンドを実行(一旦インストールしたものを削除する)
$ sudo pip uninstall futures
$ sudo pip uninstall requests
$ sudo pip uninstall simplejson
$ sudo pip uninstall six
$ sudo pip uninstall python-swiftclient
Homebrew経由でpythonをインストール
$ brew install python
再度swiftclientをインストール
$ pip install python-swiftclient
これでうまくいきました。
$ swift --version
swift 2.4.0
めでたしめでたし。
次はConoHaのオブジェクトストレージを操作してみる。

関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ

2015年7月1日水曜日

新ConoHaのオブジェクトストレージにCyberDuckで接続しようとして401認証エラー


新しくなったConoHa(https://www.conoha.jp/)のオブジェクトストレージを試そうとしてる。
旧ConoHaでは管理画面からコンテナの作成できたんだけど新ConoHaではできなくなってた。(APIやCyberDuckで操作してねって方針)
とりあえず触ってみるためにCyberDuckを使ってみたら接続できなくてハマったのでメモ。

やったこと

一応ConoHaの接続ガイド(https://www.conoha.jp/guide/guide.php?g=49)があるんだけど旧ConoHa用となっててちょいちょい違う。

最初こんな感じで設定したんだけどどうやっても401認証エラー。
これじゃ繋がりません
どうにもこうにも接続できないのでConoHaの中の人に聞いてみたら即答いただけた。
助かる・・・
ありがとうございます。

新しい設定がこれ。
これなら接続できる
すんなりと認証できた。

さぁ難しいのはここからだ・・・


関連記事

ConoHa関連の記事をまとめました。
ConoHa関連まとめ
Related Posts Plugin for WordPress, Blogger...