2013年11月21日木曜日

スライドするメニューを作る

Googleのアプリでよくある画面の横端をスワイプもしくはメニューボタンを押すことで画面端から出てくるメニューをアプリに組み込んでみました

Goggleのサービスと同じようなタイプのメニューであればSupport Libraryにある「Navigation Drawer」を組み込む事で簡単に実装できます

■Android Developers Creating Navigation Drawer
http://developer.android.com/training/implementing-navigation/nav-drawer.html


Navigation Drawerを使うと、画面左端(右端にも設定できる)からスワイプすればメニューがニュッと出てきて、コンテンツの上に表示されます

これでも良いのですがNavigation Drawerはカスタマイズ可能なオプションが少なく、コードの改変なしには細かな要望に応えるのが難しいです

顧客が「Facebookのように、コンテンツの方がスライドしてメニューが下から出てくるようなメニューにしたい」といった場合には対処ができません


Facebookのようなメニュー表示


そこで利用したいのが「SlidingMenu」です
SlidingMenuはGithubにてソースコードが公開されているます

■SlidingMenu
https://github.com/jfeinstein10/SlidingMenu

使い方も非常に簡単です
使い方については上記に記載したサイトの方に記載がありますの割愛します

どんな事ができるの?
と、動きが気になる方はデモアプリがGoogle Playで公開されているので、そちらをインストールしてご覧ください

○SlidingMenu デモ
https://play.google.com/store/apps/details?id=com.slidingmenu.example


カスタマイズも色々できて、メニューを開いた時にコンテンツ部分をどの程度残して表示するかや影のつけ方など指定できます
詳細については上記に紹介したサイトをご覧いただくか、Githubよりソースコードを取得するとデモアプリのコードも入っているので、それをみても分かると思います


こういうライブラリを公開してくれている人がいるのは開発者としては非常にありがたいですよね
いつもライブラリを利用させてもらってるばかりなので、何か自分でも作って貢献しなければ!




2013年9月26日木曜日

Remote TestKitで実機の動作テスト

世の中にいったい何種類の端末があるの?ほんと困るよー
という状況のAndroidアプリ開発の現場ですが、便利なサービスも増えてきて助かりますね


今回は「Remote TestKit」というサービスを使って実機検証をしてみましたので、その使用感などを書いてみたいと思います

Remote TestKitとは?


サイトの文書をそのまま引用すると、次のように記載されています

Remote TestKitはスマートフォンの「リモート・レンタル・サービス」です。
コレだけ読むと、「端末を郵送で送ってくれて、それを使うのかな?」と思うのですが、続きがあります

増加する様々なスマートフォン端末に、インターネットを経由して「リモートアクセス」。
一般的な実機レンタルとは一線を画す、利便性の高い検証環境を実現します。

専用ソフトからインターネット経由で端末をリモートアクセスできるサービスなんですね
他にも同じようなサービスがあった気がしますが、他は使った事がないので比較する事はできませんが便利そうです!

Androidだけじゃなくて、iOS端末もあります



何ができる?

アプリをインストールして動作させることができます
その為のサービスなので、当然ですね。。。

動作中のログを見ることができます。しかしステップ実行はできません(たぶん)

操作中の画面を録画したりスクリーンショットを取ることができるので、ドキュメント作成の時にも使えそうですね

詳しくはサイトの機能一覧を見て貰うと良いと思います



費用は?


利用はチケット制になっていて、端末を30分(3チケット)から利用できます
6チケット(1時間分)で945円なので、どうしても特定の端末でテストしたいときには非常に助かります

その他にも10時間分のチケットで9,450円のPro10や50時間分のPro50などのプランもあります
費用はPayPalや請求書での支払いなどに対応しています
PayPalでさっと支払してスグに使えるのが良いです!!

詳しくはサイトのご利用料金をみてください



どんな端末が利用できるの?


2013年9月26日に確認したところ・・・たくさんあります。。。
サイトで確認してもらったほうが早いですね



どうやって利用するの?


まずは、専用ソフトをダウンロードする必要があります
動作環境は次の通りのようです

・windows XP SP2以降、Vista、7、8(32bit/64bit)
・MacOS Ⅹ(10.7、10.8)
・Port 443に直接つながることが可能なインターネット環境

まず、ソフトをインストールしてアカウントを作成します
アカウントの作成にはメールアドレスが必要です

アカウントを作ると、登録したメールアドレスに確認コードが送られてきます
その確認コードを入力しないと利用はできません


起動すると、次のように現在利用できる空き端末の一覧が表示されます
この中から、利用したい端末を選択します
無料のお試し端末があるので、まずはお試しの端末を使ってみるといいです
ただし、無料の端末を他のユーザーが利用している場合は一覧に出てきませんのでしばらく待つ必要があります


端末を選択して、[レンタル]を選択すると端末の画面が表示されます
あとは、いろいろ触ってみてください

カメラとかGPSとかは利用できるの?

利用制限があります
GPSはセキュリティの問題で利用できないようです
カメラは撮影はできますが、カバーがされているので、何も写りません
実際に試してみたら、真黒ではなくうっすら光が写ってるなーという画像が撮影できました

利用制限については、いろいろ変更もあるかもしれないので常に最新情報を!
と、いうわけでサイトを参照してください
http://appkitbox.com/support/faq#02-02

その他の情報はFAQを見ると良いと思います
http://appkitbox.com/support/faq


使ってみた感想

 いままで、顧客から●●の端末で表示が・・・などの連絡を頂いても対応が出来なかったのですが、このサービスで利用可能な端末であれば動作確認できるので重宝しそうです
(検証できる機能に限るけど)

ちょっとだけ表示確認したいのに、30分単位でしかレンタルできないのが少し不満ですね
10分(1チケット)単位で利用できると、もっと便利に使えそうです
ただ、利用後にファクトリーリセットをしてると思われるので、10分毎だと効率が悪いんでしょうね


実機検証に困っている開発者の方は、一度利用してみることをおすすめします


2013年6月30日日曜日

課金処理も終りアプリを公開
課金がちゃんと動くかな?と見てみると下の画像の表示なっていました




「これはテスト用の注文です。課金は発生しません。」


え?と、思い調べてみると
アクセスした端末のアカウントがテスト用のアカウントとして登録してある場合にこのような表示になるようです

テスト用アカウントだということが分かりやすくて良いですが、ちょっとビックリしますね

2013年6月28日金曜日

In-App Billing Version 3を使ってみました

同じように困っている人がいるかもしれないので、メモの意味もかねてブログに書いておきます

テストで行った課金処理がクリアできない


アプリ内課金でテスト用に用意されている「android.test.purchased」というアイテムで購入処理の動作を確認する訳ですが、一度購入すると2回目からは既に購入済みとなってテストが出来ない
そこで購入情報のクリア方法をググってみるとGoogle Playのキャッシュを削除するといいという情報があった

[設定]→[アプリ]からGoogle Playを探して「キャッシュを消去」をしました

しかし、購入情報がクリアされません

ならば!と「データを消去」の方を実行したところ購入情報がクリアされました

検証端末:Android 4.2.2 のGalaxy Nexus

「キャッシュを消去」で上手くいかない人は「データを消去」を試してみてください


課金処理後のonActivityResultが呼び出されない


In-App Billing Version 3ではstartIntentSenderForResult (IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) を使って購入処理が実行されて、購入処理後に結果がonActivityResult (int requestCode, int resultCode, Intent data)に返ってきます
アプリ側ではonActivityResult (int requestCode, int resultCode, Intent data)で返却を待って購入後の処理(たとえば購入ボタンを非表示にするなど)を行えば良い訳です

しかし、あるページでは上手く動作するのにあるページでは上手く動かないという現象が発生しました

yanzmさんのブログ「Y.A.M の 雑記帳」にある「In-app billing V3 は singleInstance な Activity では使えない
をみて、ひょっとしてsingleInstanceにしてたっけ?
と見てみましたが違いました

もっと単純でした

課金処理はスーパークラスに記載して、サブクラスから購入処理を実行したのですが、このサブクラスにonActivityResult (int requestCode, int resultCode, Intent data)がありオーバーライドしていた事が原因でした
ですので
super.onActivityResult (int requestCode, int resultCode, Intent data)
を追加したら上手く動きました

単純なミスですが見つけにくかった・・・


ほかにもあったような気がしますが思い出したら追記することにします

しかし、In-App BillingがVersion 3になって簡単になりましたね
簡単といってもお金が関わる所なので慎重なテストが必要となるで作業としては大変ですね

2013年6月26日水曜日

AndroidのProguardで次のようなエラーがでて数時間格闘していた


No server options fields detected.  To suppress this message either add a field with the @Parameter annotation, or override the load() method

このエラーの後にAdMobのメディエーションでカスタムイベントの呼び出しの際にClass.forNameで呼び出すクラスのnameがnullで広告が表示されないという問題が出ていた


これを解決するために以下を追加した
-keepattributes *Annotation*
これをつけることによってアノテーションが削除されなくなる

アノテーションが削除されて正しい動作をしていなかったようですね

上記の設定でメディエーションは動作するようになったのですが、次はGoogleDrivが動作しません
どうやらSignatureも必要なようですね
併せてSignature,InnerClassも付けて次のようにしておきました
-keepattributes *Annotation*,Exception,Signature,InnerClass


■参考にさせて頂いたサイト

NO_NAME 
Proguardでコードの圧縮・最適化・難読化を行う

とあるプログラマのしらべごと
アプリにProguardを適用する

2013年1月21日月曜日

パチ帳スロ帳のお手伝い

Androidアプリ「パチ帳スロ帳」の開発のお手伝いをさせて頂きました


(画像はGoogle Playより)

このアプリは、パチンコやパチスロの収支を管理する為のアプリでホール毎や機種ごとに収支を管理して、「どのお店」「どの機種」で勝率が高いかを確認することができます

パチンコ、パチスロをされる方は、ぜひ一度利用してみてください


パチ帳スロ帳
アプリ名:パチ帳スロ帳
デベロッパー:KINY PRODUCTS
料金:無料