2013年1月22日火曜日

アプリ内課金の準備 Preparing Your In-app Billing Application

参照元(翻訳): Preparing Your In-app Billing Application | Android Developers

まずはIn-app Billing Version 3 APIを含むライブラリーをプロジェクトに追加する必要がある。Google Playと通信するためのパーミッションをアプリに設定することに加え、使用するAPI versionがGoogle Playでサポートされているか確認しなければならない。


Download the Sample Application

ここでは、アプリ内課金のサンプルアプリ「TrivialDrive」を実装の参考に使用する。このサンプルは課金サービスとmarshal and unmarshal data typesをすばやくセットアップしたり、アプリのメインスレッドからの課金リクエストを処理したりする便利なクラスを含む。

サンプルアプリのダウンロード:
  1. Android SKD Managerを開く。
  2. SDK Managerの中のExtrasセクションを開く。
  3. Google Play Billing Libraryを選択する。In-app BillingのVersion 3以上が選択されていることを確認する。
  4. ダウンロードを完了するためにinstallをクリックする。
/your/sdk/location/extras/google/play_billing/in-app-billing-v03 にサンプルファイルがインストールされる。


Add Your Application to the Developer Console

Google Play Developer Consoleで課金アプリの公開やアプリ内で購入可能な様々なデジタル商品の管理を行う。デベロッパーコンソールで新しいアプリのエントリーを作成したとき、自動的にアプリのpublic license keyが作られる。このキーはアプリからGoogle Playへのセキュリティ接続を確立するために必要である。アプリに対して一度だけこのキーの生成が必要で、apkファイルをアップデートするときはこれらのステップを繰り返す必要はない。

デベロッパーコンソールにアプリを追加:
  1. Google Play Developer Consoleにログイン。アプリ内アイテムを売るためにはGoogle Checkout Merchantアカウントが必要。
  2. もしまだ新しいバージョンのデベロッパーコンソールにログインしていない場合は、Try the new designをクリックする。
  3. All ApplicationsタブにあるAdd new applicationをクリックし、アプリ名を入力、Prepare Store Listingをクリックする。
  4. Service & APIs タブからアプリのために生成されたpublic license keyをメモる。これはBase64 の文字列で後にアプリのコードに組み込む必要がある。

Add the In-app Billing Library

Version 3を使うために、Android projectにIInAppBillingService.aidlファイルを追加しなければならない。Android Interface Definition Language (AIDL)ファイルはGoogle Play serviceとのインターフェイスを定義したものだ。

IInAppBillingService.aidlファイルはサンプルアプリのなかにある。新しいアプリの作成 or 既存のアプリの変更のどちらかによって、次の指示に従う。

New Project
  1. TrivialDraiveのサンプルファイルをAndroid projectにコピーする。
  2. これらのサンプルファイルのパッケージ名をあなたのプロジェクトで使用するパッケージ名に修正する。Eclipseではパッケージ名を右クリック、Refactor > Renameのショートカットが使える。
  3. AndroidManifest.xmlファイルを開きパッケージ属性の値を使用するパッケージ名に更新する。
  4. コンパイルがうまくいくようにimport statementを要求のある通り修正する。Eclipseではエラーを出しているファイル上でCtrl+Shift+Oのショートカットが使える。
  5. サンプルをあなたのアプリケーションを作成するために修正する。デベロッパーコンソールのBase64 public license keyをあたなのMainActivity.java上でコピーすることを忘れないように。
Existing Project
  1. IInAppBillingService.aidlファイルをAndroid projectに追加。
    • Eclipseを使っていれば、/src ディレクトリーにaidlファイルをインポートする。
    • そうでない場合は、次のディレクトリを作ってaidlファイルをコピーする。 /src/com/android/vending/billing
  2. アプリをBuildして、IInAppBillingService.javaファイルが /gen ディレクトリに生成されていることを確認する。
  3. TrivialDriveサンプルの /util ディレクトリのhelperクラスをプロジェクトに追加する。あなたのプロジェクトのコンパイルがうまくいくようにパッケージ名宣言を忘れずに変更する。
これであなたのプロジェクトはIn-app Billing Version 3ライブラリーを含んでいる。


Set the Billing Permission

Google Playの課金サービスとやりとりするための権限が必要になる。マニフェストファイルに次の1行を加える。

<uses-permission android:name="com.android.vending.BILLING /">


Initiate a Connection with Google Play

アプリから課金リクエストを送るためにActivityとGoogle Playの課金サービスをバインドしなくてはならない。サンプルで与えられたクラスが課金サービスのバインドを処理するので、あなたはネットワークの接続を直接管理しなくてよい。

Google Playとの同期通信をセットアップするために、activityのonCreateメソッドのなかでIabHeplerインスタンスを作成する。コンストラクタにactivityのコンテキストとライセンスキーを渡す。

Security Recommendation:Google Playから与えたれたライセンスキーそのままをコードに組み込まないことを強く勧める。代わりに、実行時に部分文字列を組み合わせて構成したり、暗号化したものを復号してコンストラクタに渡す。これにより悪意あるサードパーティがAPKファイルからライセンスキーの文字列を変更することを難しくする。

IabHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
   // ...
   String base64EncodedPublicKey;
   
   // compute your public key and store it in base64EncodedPublicKey
   mHelper = new IabHelper(this, base64EncodedPublicKey);
}

次にIabHelperインスタンスのstartSetupメソッドを呼びサービスのバインディグを実行する。メソッドにはOnIabSetupFinishedListenerのインスタンスを渡す。これはIabHelperが非同期セットアップを完了すると呼ばれる。セットアップの一環としてIabHelperはIn-app Billing Version 3 APIがGoogle Playでサポートされているかどうかチェックする。もしこのバージョンがサポートされていなかったりバインディング中にエラーが発生した場合はこのリスナーに通知がいき、エラーメッセージを含んだIabResultオブジェクトが渡される。

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
   public void onIabSetupFinished(IabResult result) {
      if (!result.isSuccess()) {
         // Oh noes, there was a problem.
         Log.d(TAG, "Problem setting up In-app Billing: " + result);
      }            
         // Hooray, IAB is fully set up!  
   }
});

セットアップが正常に完了すると、mHeplerをGoogle Play serviceとの通信に使用できる。アプリを起動したとき、ユーザーがどのアプリ内アイテムを所有しているかを調べることは良い実践である。これについては後のセクションで触れる。

important: アクティビティを終了させるときはアンバインドするのを忘れてはならない。アンバインドしないとデバイスのパフォーマンスを下げる場合がある。アンバインドしリソースを開放するには、アクティビティが終了するときにIabHelperのdisposeメソッドを呼ぶ。

@Override
public void onDestroy() {
   if (mHelper != null) mHelper.dispose();
   mHelper = null;
}

2013年1月20日日曜日

アプリ内商品の販売 Selling In-app Products

参照元(翻訳): Selling In-app Products | Android Developers

ここでは、アンドロイドのアプリ内課金についての一般的な実装方法がわかる。

Google Playのアプリ内課金を使えば、デジタルコンテンツやアプリのアップブレードに対する請求を行うことができる。in app Billing APIを使うことで簡単にアプリに課金を組み込める。Google Playに商品の詳細をリクエストしたり、アプリ内商品のオーダーを発行したり、ユーザーの購入履歴に基づいて所有情報を復帰させたりできる。また、ローカルでの価格や有効性などを問い合わせることもできる。Google Playがユーザーへの課金処理をシームレスにし、より直感的な体験をユーザーへ提供する。

ここではVersion 3 APIでの導入方法を説明する。


Lessons

アプリ内課金の準備 Preparing Your In-app Billing Application
  • サンプルアプリのダウンロード
  • デベロッパーコンソールにアプリを追加
  • アプリ内課金ライブラリーの追加
  • パーミッションの設定
  • Google Playと接続開始
販売のためのアプリ内商品の確立 Establishing In-app Billing Products for Sale
  • アプリ内商品の特定
  • アプリ内商品の詳細問い合わせ
アプリ内課金商品の購入 Purchase In-app Billing Products
  • アイテムの購入
  • 購入したアイテムの問い合わせ
  • 購入品の消費
課金アプリのテスト Testing Your In-app Billing Application
  • 静的な返答でのテスト
  • 独自商品IDでのテスト

2010年9月21日火曜日

Auf wiedersehen

彼がドイツに帰った。

後半は環境が変わり会う機会が随分と減ってしまったけど、彼との出会いは僕にとって貴重な経験でした。

1年前は彼の日本語より僕の英語の方が上だったと思います。

不安だったけど英語でコミュニケーションを取ってみたかった僕はドキドキしました。

彼の日本語がペラペラになって日本語で会話するよりも、俺の英語力が上がって英語で会話することを俺は望んでいました。

だってその方が、カッコよく見えるから。

だから最後に会ったとき、君の日本語がそんなに流暢じゃなくて実は少しホッとしたよ。

でも、俺の英語の方が全然上達してなくてごめんね。カッコよくなかったね。

言い訳じゃないが、言葉が通じない中で友達になれたのは、通じる相手と友達になるよりもすごい事なんだ。

コミュニケーションが制限されていても仲良くなれたのはなんでだと思う?

おそらくは君の人柄と日本人への好意・・。あとは全部俺の実力。

でも、ふと考える。俺の英語がもっと流暢ならもっともっと楽しかったのかなと。
まあ、それは次の機会に。


初めて会った日に俺は中学の教科書通りに、

what are you interested in ? と訊くと

Japanese culture と笑顔で答え、さらに俺は冗談で

and Japanese girl と教科書にはない返しをすると、照れながら『少し』と言った君は、きちんと日本人の彼女ができていました。

そして、一度ドイツに戻り再び日本に帰ってくると力強く言ってくれました。だから俺はつぎ会えるのを楽しみにしているよ!


最後に俺が知っているドイツ語を二つ送ります。

Danke

Baumkuchen



しかし世の中、便利になったものでskypeとかあると劇的な別れがなくなって、それはそれで寂しいと思うのは俺だけだろうか・・

2009年12月26日土曜日

彼が来てはや2ヶ月

ドイツからの留学生が来てから2ヶ月が過ぎた。

仲良くなった。俺の周りに外国人が増えた。

携帯電話には彼の名前がアルファベットで入り、英語でメールのやり取りをしている自分に惚れそうになった。

最初に彼からメールが来たときは、英語に驚いてスパムメールと間違えたのが懐かしい。


外国人に囲まれてご飯を食べることもある。

ドイツからの留学生3人と俺、囲碁で言えばおそらく取られてしまいそうな状態の中、ご飯を食べたこともある。

彼が来てから意外と周りに外国人がいることを知り、話す機会も増えた。ドイツ、中国、台湾、スペイン、イタリア、オーストリア、カナダ・・。

全員が英語を話す。中には日本語を流暢に話す留学生にも何人か出会ったが、特に語学を専門としているわけでもなかったりするから、よく考えればなかなかの才女達だ。

かたや日本語しか話せない俺、かたや母国語を使わずに日本語と英語の通訳をしてくれる者達。

なんなのだろうか、この圧倒的なまでの差は・・。

日本語と英語の通訳をしてもらえてラッキー、これでコミュニケーションがとれるぞ!

とか思ってしまっている俺は、オセロで言うなら黒に挟まれているのに平然と白いままでいようとする、国際という名のルール知らずの大馬鹿やろうだ。

ドイツ人同士が母国語を封印してまで英語を喋ってくれてるのに、俺は関西弁を封印して標準語で喋るのが精一杯なときがある。


彼はいつも当たり前のように英語で話しをするからときどき錯覚するが、彼はドイツ語を喋れる。

彼がskypeを使ってドイツの友達と喋っているとき、ドキッとした。カタコトの日本語を喋っているときとは違う、英語を喋っているときとも違う、言うならこれが彼の本来の姿なのだ。

ちなみに俺は第二外国語として運よくドイツ語を選択していたことを忘れたままでいられるくらいに、彼が何を喋っているのか分からなかった。

そのときは、彼が久しぶりに母国語を使い楽しそうに喋っていたので、それでいいと思った。

日本人は中高6年間勉強しても英語が喋れないんだぜ!超おもしれー!!とか、日本のガール達はヨーロピアンにメロメロです!とかではなかったと信じている。

2009年10月25日日曜日

留学生

先日、ドイツから留学生がやってきた。

彼は日本語があまり喋れないので、コミュニケーションは英語で取ることになる。

英会話の勉強を独学でやっている僕としては、絶好の機会であることは間違いない。かなりエキサイティングだ。

少しくらいなら喋れる自信があったが、初日はとにかく話せない上に聴き取れない。

なんていうか、彼の話す英語は生きている。緩急と強弱がある。

とりあえず、Oh,Yes! Yes!! OK! OK!! と言い、あとは満面の笑みだけで乗り切った。

日本人が英語でなんとかコミュニケーションを取ろうとするとき、馴染みのある単語だけをとにかく愚かなほど繰り返してしまうんだ。

最初はとにかくコミュニケーションが取りづらく、お互い困惑してしまったと思う。

僕自身2日目の朝、家を出るときに若干の躊躇はあったが、『彼は日本に興味がある留学生であって、決して敵ではない』と言い聞かせながら家を出た。

事実、彼は日本に興味があり、礼儀正しいので接し易い。こちらが英語を話せないと分かると、『2ヶ月で日本語を覚えるので、そしたら僕らは話せるね!』とか言ってくれる。

英語だったけれど、確かにそれっぽいことを何となく言っていたように感じた。

1週間が経ちお互いに少しずつ慣れてきたが、彼の英語を話すスピードは遅くなる一方だ。

いや、彼が遅くしているじゃない・・。俺のリスニング能力がUPしているんだ・・。


何にせよ、もう少しまともに話せるようにならないとダメだ。

少し前に使っていた教材はまだ完全に身に付いていなかったが、図書館から借りていた物なので一度だけ延長して返した。

次は『ALL IN ONE Re-Start』を使うことにする。

ターゲットが『TOEIC 500-550目標』と、すでにクリアしているが、外国人の前ではTOEIC 300点以下(英語でのコミュニケーションは不可能?)くらいの実力しか出せなかったから。

ネット上で日本語→英語の順で収録された音声が配布されているので、また主に移動時間を利用して勉強しようと思う。

2009年9月14日月曜日

次のステップへ

4ヶ月ほど前から週2,3のペースで英会話のCDを移動時間に聞くようにしていた。

日本語→英語の順で録音された教材を使い英訳の練習をしたおかげで、簡単な会話ならできるようになった気がする。

使ったのは『どんどん話すための瞬間英作文トレーニング』という本。

中学レベルの英文が簡単な単語だけを使ってたくさん書かれている。
This is a good book. から始まり、関係代名詞や関係副詞を使った文まで。

最初は簡単な疑問文すらとっさに出てこなかった。日頃、英語の論文やマニュアルを読むことはあるが、これらの中には疑問文がほとんど出てこないからな・・。


まあ、この教材はだいたい消化できたので、少し前から次のレベルの教材を探していた。

先日、同じように日本語→英語の音声が録音された教材で良い物を見つけた。

今度は『魔法の口ぐせ英語』という本を使うことにする。

ストーリー仕立てなので英会話らしく、レベル的にもちょうど良さそうだ。