2013年8月18日日曜日

AndroidアプリにParse.comのプッシュ通知機能を実装する方法+送信する方法

「グロースハック(growth hack)」とかいう流行りつつある単語に乗せられて、プッシュ通知(Push Notification)を使ってみようと思い立ち、この間Facebookに買収されたBaaS(Backend as a Service)のParse.comが提供するプッシュ通知機能を、自作クソゲー「ギリジャン!」に乗せてみたのでそのメモ。
というか、https://parse.com/tutorials/android-push-notificationsの必要部分を抜粋しての和訳。

なお、既にParse.comにアプリの登録をしてることを前提としています。

【実装編】

■AndroidManifest.xml

1.サービス
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <action android:name="android.intent.action.USER_PRESENT" />
  </intent-filter>
</receiver>

2.パーミッション
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />

■Activityクラス

1.初期化
onCreateメソッドに
Parse.initialize(this, "アプリID", "クライアントキー");
アプリIDもクライアントキーもParse.comの画面(下の画像)に表示されているものを使う。



2.通知を受信する部分の実装
onCreateメソッドに
PushService.setDefaultPushCallback(this, ほにゃららActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
「ほにゃららActivity.class」には、端末上に表示された通知をクリックしたときに表示させたいActivityクラスを書く。
インストール時に、アプリ名(言語によってアプリ名が違う場合はその言語に応じたアプリ名)とかアプリのバージョンとかタイムゾーンがParse.comに送信されるけど、それ以外にも情報がほしければ実装可能。
今回は試しに実装しただけなので省略。

3.トラッキングの実装
onCreateメソッドに
ParseAnalytics.trackAppOpened(getIntent());
通知からアプリが開かれたかどうかをトラッキングしたければ書く。
(普通はトラッキングしたいはず。)

【送信編】

あとはParse.comの管理画面から通知をするだけ。

まず、通知するページにアクセスして、Send a pushボタンをクリック


次に、通知する内容を登録して、Send Notificationボタンをクリック。


実装も送信もめっちゃ簡単。

ただし、何に使うねんと言われてもよく分かりまへん。
このエントリーをはてなブックマークに追加

2013年7月7日日曜日

enchant.jsでゲーム作ってPhoneGapでスマホアプリ化したった

HTML5+JavaScriptでゲームが作れるフレームワークであるenchant.js(http://enchantjs.com/ja/)で簡単なゲームを作って、それをPhoneGapでラップしてアプリ化してみた。

穴に落ちないようにギリギリでジャンプし続けるだけの超単純なゲームです。
ギリギリでジャンプすることだけが目的なので、ジャンプした後は勝手に飛距離を調整して着地させてます。
キャラがクマなのはenchant.jsに付属してたものをそのまま使ってるだけで、お金か絵心があればオリジナルキャラでやりたかったけどやむなし。



実装上困った点はまた後日まとめるとして、Android4.x系のバグでenchant.jsの最新バージョンが使えなかったこととPhoneGapとの絡みでコールバック地獄が大変。

あと、使いたかったParse.comでスコアの共有。


なんのトラブルもなく超簡単に実装できた。

iPhone版はリジェクトされたのでAndroid版しかないけど、気が向いたら遊んでみてくださいな。


Android app on Google Play
このエントリーをはてなブックマークに追加

2013年5月31日金曜日

さっそくSquareリーダー&レジアプリを使ってみた。

ちまたで噂のSquare

Squareリーダーが届いたので早速使ってみました。

まずは箱。
めっちゃあっさりしたシンプルな紙の箱。



開けた。


ちっちゃ。

出してみた。


逆サイドから。


こっちからカードを入れるみたい。

スマホに差してみた。


ジャスミンかわいい。

で、レジアプリを起動。
商品の値段として50円と入力した画面。


カードを通してみた。


100円以上じゃないといけないみたい。

というわけで100円に入れ直して再度通してみた。


AMEXはあかんみたい。
箱にもそう書いてた。

別のカードを通してみた。


署名画面が出てきた!

署名した。


で、右上の「続行」ボタンを押したら、


決済完了してもうた。
簡単過ぎワロタ

で、「メールで送信」っていうところにメアドを入れて、「送信」ボタンをポチッとな。


そしたら、メールが飛んできた!

一番上の「吉村恭輔」は、あらかじめ設定していたお店の名前です。
で、その下に住所と電話番号。
そして一番下には署名がデカデカと。


字汚すぎゲロゲロ

管理画面を見たら決済情報が見れます。


これで7営業日待てば登録した銀行口座に手数料を引いたお金が振り込まれるようです。

トップページにはこれ見よがしに「翌営業日」って書いてますが、これは三井住友銀行の口座を登録した場合のみですわ。

でも、通常の支払サイトと比べたら格段に早いよな。

操作も超簡単。これなら誰でも扱える。


個人としても使い道はありそう。

フリマとか家の前でレモネード売るときとか。
(両方やったことないけど。)


路上でやってる占い師さんとか屋台のラーメン屋さんでカード使えるとかアツいな。

クロい感じでやってきそうなのは、ショッピング枠の現金化とかね。

キャッシング代わりに使ったらあかんで。


これはユーザーの立場からも普及して欲しい!!

手数料のことはあるけど、キャッシュフローの関係でクレジット導入していないお店は是非導入して欲しい!!

お願いしま~す!

このエントリーをはてなブックマークに追加

2013年5月14日火曜日

PhoneGapのWebIntentプラグインを2.7.0に対応させてみた。

PhoneGapのプラグインはたくさんあっていいけど、PhoneGap本体の頻繁なアップデートに追随していないものもいっぱいあってイマイチ。

ちょっとしたアップデートならいいけど、プラグインのアーキテクチャがゴロッと変わったりしてるのに放置されたりするのさすがにどうかと思うわ。

それはさておき、これまでPhoneGap2.3.0を使っていたのを現時点(2013/05/14)で最新の2.7.0にしたのを機に、今使っているプラグインをそれに対応させたので、せっかくなので公開しておきます。 

まずはWebIntentプラグイン。 その名のとおりIntentを発行するプラグインで、僕はアプリからブラウザを起動するのに使ってます。

https://github.com/kyosuke25/phonegap-plugins/tree/master/Android/WebIntent

どうぞご自由にお使いください。
このエントリーをはてなブックマークに追加

2013年3月20日水曜日

iOSアプリの2.23リジェクトに対応した話

iPhone版の「ねちゃったー」をバグフィックスしたのにリジェクトされました。
iOS Data Storage Guidelinesに従え、と。


どうやら、アプリのホームディレクトリ直下のDocumentフォルダにはユーザーが作成したデータ(メモ書きとか写真とか)以外を置いたらダメみたい。

というのも、DocumentフォルダはiCloudに保存する対象になるのでそこに無駄なファイルを置くと、iCloudの容量を圧迫してユーザーにとって好ましくないからだとか。
(でも、そこは前回から何も変えてないから、前回見逃したんやろ。ええ加減やぞw)

で、Documentフォルダをのぞいてみたら、アラームの設定を記録したDBファイル(sqliteファイル)しかない。
でも、これっていらんデータではないし、ある意味ユーザーが作成したデータやし。。。
だいたいデバイスを超えてアラーム設定を同じにしたい場合もあるやろうからiCloudに保存しても良いんじゃないか。(いや、これはないなw)

というわけで、Apple様には素直に従って修正することにしました。

を参考にしました。
とても参考になりました。ありがとうございました。

■ sqliteファイルの保存場所をDocumentフォルダからLibrary/Cachesに変更

NSSearchPathForDirectorisInDomains(NSDocumentDirectory, NSUserDamainMask, YES);
となっている場所を
NSSearchPathForDirectorisInDomains(NSCachesDirectory, NSUserDamainMask, YES);
に変えたらいいだけ。

■ アプリの起動時にDocumentフォルダにsqliteファイルがあったらLibrary/Cachesに移動

(数少ない)既存ユーザーのための対応。
NSFileManagerクラスを使って、
fileExistsAtPath
でファイルの有無を確認して、存在すれば、
moveItemAtPath
で移動するだけ。

さて、今度は無事承認されるでしょうか。
結果は1週間ちょっと後。

このエントリーをはてなブックマークに追加

2013年3月8日金曜日

ねちゃったー for iPhone、とうとうリリースされちゃったー!

2度のrejectを経てようやくリリースされました!

https://itunes.apple.com/jp/app/id603552259

もしよかったらダウンロードしてやってください。


このエントリーをはてなブックマークに追加

2013年3月2日土曜日

ねちゃったー、またまたreject!

「ねちゃったー」がまたAppStoreからrejectを食らいました。

今回の理由は2つ(増えとるw)

1.アイコンの鳥がTwitterの公式ロゴと紛らわしい。
2.Descriptionに「Android」っていう文字が入ってる。

1はともかくとして、2くらいは許してよ。
なので、Androidアプリ大賞の特別賞をもらったことも書けない。

というわけで、再度アイコンを変えました。




このエントリーをはてなブックマークに追加

2013年2月26日火曜日

ねちゃったー for iPhone、リリースならず!あっさりreject。

「ねちゃったー for iPhone」ですが、ようやくレビューに入ったと思ったら即rejectでした。

rejectの理由はアイコンにTwitterロゴ(「t」の文字)が含まれているからダメ、とのことでした。
フリーフォントで作って似せたものであっても誤解を生むからNGということです。

というわけで、アイコンを変えました。




このエントリーをはてなブックマークに追加

2013年2月22日金曜日

「ねちゃったー」の宣伝をココナラを使ってやってみた。

今度は国内への宣伝を目論んで(※)、「Fiverr」と同種の国内サービスである「ココナラ」を使ってみることにしました。
※誤解のないように書いておくと、これが正しいマーケティング手法だとは決して思っていないです。つまり、これは「正しくない」という仮説の検証です。

「Fiverr」の場合、Twitterに関する案件(gig)はフォロワーをメッチャ増やすよというのが主なものでした。
「ココナラ」の場合、同じように"Twitter"で検索すると、「教えます」系が主なもので、今回の不特定多数の人に情報をバラまく案件が少なかったです。

そこで、"フォロワー"で検索してみました。
そうすると、「フォロワーをメッチャ増やすよ」系か「俺のフォロワーにバラまくよ」系に絞られます。
こんな感じです↓


で、(正直誰でもそんなに変わらないでしょうけど、)一応フォロワー数が多い「総フォロワー数 49716人 効果は絶大!一週間で189回ツイート可能」という案件にしました。


そして、画面右上の「購入画面に進む」ボタンをクリックすると決済画面に遷移します。


決済が完了すると、その後取るべきアクションが記載されたページに遷移します。
この辺りは当然Fiverrと同じです。
そして、あとはその指示に従ってツイートして欲しい文章を送信して、作業待ち。


で、1日後からツイートが開始された模様。
9つのアカウントを使ってツイートすると書いていたので、下の9つと思われます。









これが、1日3回×1週間ツイートされるようです。
まあ500円で不特定多数の目に触れるのであればAdwordsに出すより手軽ですね。
Adwordsと比較して意味があるかどうかは要検証。

このエントリーをはてなブックマークに追加

2013年2月21日木曜日

「ねちゃったー」のランディングページを作ってみた。

前回のエントリーでは「Fiverr」でランディングページのテンプレートを買ったときのことを書きました。

そのテンプレートを使って、「ねちゃったー」のランディングページを実際に作ってみました。

まず大変だったのが101種類もあるテンプレートの中からどれを使うのかを選ぶことでした。

それが終われば、あとはページの作成ですがこれは基本的には画像の差し替え、文言の変更で作業は完了です。

そして最終的にできあがったのがこれ。


いかがでしょう。
われながらカッコ良いものができたと思います。

http://kyosuke25.com/nechatter/ で実物をご覧いただけます。

【追記】
ついでに、日本語版も作ってみました。
http://kyosuke25.com/nechatter/ja/

このエントリーをはてなブックマークに追加

アプリのランディングページを作るためのテンプレートを「Fiverr」を使って買ってみた。

やはり何事も実際にやってみなくては分からないので、アプリのランディングページを作ってみようと思い立ちました。

そこで、最近具体的に依頼したいことがなくてもついつい見てしまう「Fiverr」で探してみました。

最初はランディングページを作ってくれる人を探していました。
しかし、テンプレート販売のgigを見つけると、デザインの好みとか要望を伝えるめんどくささに負けてしまい、そのテンプレートを購入することにしました。

すると20分後に作業完了の通知が来ました。
どういう形で納品されるのかと思ってサイトに行くと、ダウンロードリンクが記載されたテキストファイルが添付されていました。



そのURLからダウンロードしたところ、合計で260MBほどありました。
カッコイイデザインが揃っており、数もめっちゃ多いです。
このボリュームで5ドルというのはかなりの高コストパフォーマンスだと思います。

※そのテンプレートは「くれ」とこっそり言われてもお渡しすることはないですからね。絶対しないですからね。絶対。
このエントリーをはてなブックマークに追加

2013年2月20日水曜日

「ねちゃったー」の宣伝をFiverrを使ってやってみた。(その1)

5ドルで作業を依頼できる「Fiverr」を使って、Android版「ねちゃったー」の宣伝を依頼してみました。
「Fiverr」の読み方は(多分)ファイバー。fiveが語源なので。
これも不特定多数に対する業務委託の依頼なので、クラウドソーシングの一つと言っていいと思います。

ただ、先に言っておくと、このように生きてるか分からないものすごい数のフォロワーに情報をバラまくことはソーシャルマーケティングとして効果があるとは思えないです。
ただ、試してみないことには正しいかどうか判断できないので、そのチャレンジを兼ねています。

で、もし僕の考えとは違って結果が良ければ、今後iPhone版「ねちゃったー」の宣伝で使おうと思い、その予行演習のようなものです。

使い方はとても簡単で、トップページからどういう作業を依頼したいのかを検索します。
今回は「Twitter」で検索しました。



検索結果にある1件1件の案件を「gig」と呼びます。
BOOWYを想起させ、無駄にカッコイイ。

そして気になるgigをクリックしてその詳細を見ていきます。
今回選んだこの方は、10万人のフォロワーにツイートするよ、っていう内容です。
どうやらそこそこの売れっ子で、「99 POSITIVE REVIEWS」とあります。



気に入れば画面右上の「Order Now」ボタンをクリックします。
今回はドイツの方ということでヨーロッパ進出を試したかったのと、すぐ対応していただけそうだったことからこの方に依頼しました。

「Order Now」ボタンをクリックするとPaypalの決済画面に移ります。
そこは慣れ親しんだPaypalの決済を淡々と進めるだけです。

そして決済が完了するとFiverrに戻ってきます。



戻ってきて表示される画面には、出品者からのメッセージが書いてあるので、それに対する返信をします。
今回は、「俺のフォロワーに何を共有して欲しいかというのを、キミのツイートのURLと併せて教えてくれ。」とあったので、その情報を記入しました。
「キミのツイート」っていうのは、おそらくリツイートするために必要になるのでしょう。
なので、下のようにあらかじめ英語でツイートしておきました。

そして返信が終われば発注完了。
あとはこの方が所定の作業をするのを待つだけです。

と、しばらくするとメールが来て作業が終わったぞ、と。

そして結果。
上のツイートに表示されているように53リツイートされたようです。(この記事を書いた時点の話です。)
が、短縮URLに計測できるような仕込みをしていたのですが、クリック数がたったの7!
一番大事なダウンロード数。
たった2しか増えてない。。。
マジかよorz
これは意味ないな~。


頼んだ人が悪かったのか、内容が悪かったのか。
もう何回か試してみます。

このエントリーをはてなブックマークに追加

2013年2月19日火曜日

「クラウドソーシングサミット」で気まずかった話

随分前ですが、2012年9月19日(水)にSSIで行われた第1回クラウドソーシングサミットで、ユーザーの立場からのクラウドソーシングということでFreelancer.comを使った時のことを話しました。

資料はこんな感じ↓



オープニングアクトを飾ったわけですが、この発表中は全然良い感じで、話もウケたウケた。
ここまでは大満足。

ただその後のプレゼンターの皆さんの発表内容がガチガチの本気モードだったため、僕の発表が浮きまくってしまいました。
完全に前座。前説。
そらもう、その場に居づらいこと居づらいこと。

「面白かった」とか言われても慰めにしか聞こえない。
他のプレゼンターの方からは「しゃべりやすい雰囲気になりました。」って言っていただいたけど、それ前説www

確かに資料を見れば分かるとおり、かなりふざけた内容でした。
関係者の方々、および参加された方々、申し訳ございませんでした。

なお、他のプレゼンターは、
イノーバの宗像社長
ランサーズの秋好社長
クラウドワークスの吉田社長
MUGENUPの一岡社長
パソナテック(Job-Hub)の湯田さん

・・・これは完全に場違いでしょw

というわけで、めげずに頑張ります。

PS
その後二度とそういう場に呼ばれなくなったことは言うまでもない。

このエントリーをはてなブックマークに追加

「情報・サービスイノベーション分野 公開シンポジウム」でスベってきた話

去る2013年2月16日(土)、東工大田町キャンパスで行われた情報・サービスイノベーション分野 公開シンポジウムで、ベンチャー企業におけるクラウドソーシングの利用について講演してきました。

その時の様子です↓



50人くらいを相手にした講演でしたが、話した内容と参加されていた方が官公庁の方や大学の先生方が多かったことによる空気の真面目さがマッチせずスベりました。
単に口の悪いプレゼンターになってしまいました。
つらいつらい30分でした。

資料はこんな感じ↓


良い経験をさせていただきました。
聞きに来られた方、ありがとうございました。

このエントリーをはてなブックマークに追加

「ねちゃったー」をApp Storeに申請しました!

クラウドソーシングによるグローバルでの開発を試みた「ねちゃったー」ですが、ようやくバグの修正、および日本語化が完了し、「ねちゃったー for iPhone」というアプリ名でApp Storeに申請しました。

ここから約2週間掛かるそうですが、待ち遠しいです。

このエントリーをはてなブックマークに追加

2013年2月18日月曜日

社内で開催される「新規ビジネス『アイディア』コンテスト」は超ダサい。

世の中には企画やアイディアを出すことが目的になっちゃってる人たちがいっぱいいます。
「あれは俺も考えてた。」「昔考えたことがあった。」
だっせー。クソだっせー。

あと、アイディア集団やらクリエイティブ集団と称する会社もあるよね。
アイディア出すのが仕事か?クリエイティブな企画をするのが仕事か?
だっせー。クソだっせー。

企画やアイディアっていうのは形にして初めて価値が出るのであって、形になる前のそれ自体はクソみたいな寝言・妄言。

CCCの増田社長は確かにTSUTAYAという企画を実現させて、レンタル文化を作り上げた。
これはすごい。

いっぱいあると思うけど、某社では「企画こそ命!」であるとして新規ビジネスアイディアコンテストを開催し、優秀者を表彰までしちゃう。
その後はというと、そこまで。
「そのアイディア、すげーな」「そのサービス、便利!」
だっせー。クソだっせー。

なんでやらないかというと、多くの場合、それなりに労力とお金が掛かるから、というアホな理由。
じゃあやらせんな。

そこで提案したいのが、1チーム50万円くらいの予算をつけて、クラウドソーシングを使ってアイディアを実現させて勝負するコンテストです。
(もちろん自分で作ったらそんなに掛からないけど、そうそう作れる人はいないし時間も掛かる。)

世の中にある「ビジネスコンテスト」ってアイディアを形にしていないと参加資格がない。
それが企業内のコンテストになった途端にアイディアで良いなんてナメてるわな。

というわけで、クラウドソーシングに不安感を持ってる人、導入してみたいと思ってる人は、まずはこういう本業とは関係が薄いところから使い始めてみたらどうかな、と思う次第です。
このエントリーをはてなブックマークに追加

クラウドソーシング利用に伴う単価の低下は搾取じゃない!

最近、仕事でもプライベートでもクラウドソーシングサービスを使いまくっているので、いろいろ思うことが出てきました。

簡単に言うと、グローバル化がハンパないってことです。

例えば、今回やったような「ねちゃったー」を移植するときの話。

日本で普通の受託開発をしている会社に外注するとなると、余裕で50万円は掛かるでしょう。
ランサーズクラウドワークス等の日本のクラウドソーシングサービスを使って開発者を見つけて発注しても、少なく見積もっても20万円は掛かりそう。
一方、oDeskFreelancer.com等海外のクラウドソーシングサービスを使うと、3万円。
日本語化を加えても6万円

検討の余地すらない価格差です。

この「海外で開発+日本で日本語化」というプロセスが定着してしまうと、日本勢はローカライズ要員にしかならなくなってしまいます。

そうなると日本勢はどう出るのかというと、20万円から6万円に価格を落としてくるでしょう。
日本語化のみの3万円よりは開発丸ごとで6万円を選ぶはずです。
(もちろん、低単価の案件は無視して20万円で発注してくれる人を探す、という方針もありでしょうけど、こういう内外の価格差を知っていても利用しない会社が顧客ではない会社はこの方針は会社もろとも破綻します。)

人によってはこれを「労働力の搾取」と表現するかもしれません。
でもそれは(100%ではないですが)違います。
これは「グローバルな市場における価格の適正化」です。

「搾取」というのは、例えば大企業が中小のSIerにやってるようなことです。
つまり立場の上下、力の強弱を利用して価格を抑えこむ行為が「搾取」です。

グローバル市場に放り出されて価格を下げざるを得なくなるのは、労働単価の低下という結果だけが搾取の場合と同じであって、中身は全然違います。
これを搾取だと言い続ける限り、グローバル市場に死体が積み重なっていくでしょう。

もちろん、誰か分からない人と仕事をすることに対する抵抗感からクラウドソーシングをそもそも使うことを考えない人もいるので、そういう人たち向けに従前の単価で仕事をして生き抜いていく会社もたくさんあるでしょう。
お互いベッタリの関係で体力のある大企業は大丈夫でしょう。

なので、グローバル市場に打って出ない会社は死ぬ、と言うつもりもないですし、大企業もクラウドソーシングに順応しろ、と言うつもりもないです。

ただ、フリーランスのエンジニアとか中小企業はちょっと危機感を持った方が良い気がします。
このエントリーをはてなブックマークに追加

「採点しようぜ」のアイコン制作をクラウドワークスを使ってやってみた。

無事App Store上でも公開されたボクシング採点アプリ「採点しようぜ」ですが、当初のアイコンは自作でダッサダサでした。

そこで、クラウドワークスを使ってアイコンを制作していただける方を募集しました。
https://crowdworks.jp/public/jobs/4153

価格は申し訳ないくらい安くて、3000円

それでもありがたいことに3人の方が応募してくれました。

結局、メッセージで色々コミュニケーションが取れた方に発注しました。
https://crowdworks.jp/public/employees/2497

普段はランサーズで受注しているそうで、最低でも1案件1万円で仕事をされている方です。
http://www.lancers.jp/profile/GAP_STUDIO

そして、制作していただいたアイコンがこれ↓

期待どおりクオリティが高く大満足です。
そしてタイトル画像も作っていただきました。

当然ですが、下手に自分で作るよりもプロにお願いした方が絶対に良いです。

自分で作ってもしょーもないアイコンしかできなくて悩んでいる方の参考になれば。


このエントリーをはてなブックマークに追加

「ねちゃったー」の日本語化をクラウドワークスを使ってやってみた。

前回の続きです。

Freelancer.comを使ってインドの方に開発していただいたのでもちろん英語で納品されました。

しかし、僕自身が日本人ですし、Android版「ねちゃったー」のユーザーはほぼ日本人なので、日本語化が必須です。

最初は自分でやろうとしたのですが、ここでもObjective-Cのさっぱりさにより断念。

というわけで、クラウドワークスで日本語化してもらう方を募集しました。
https://crowdworks.jp/public/jobs/4676

ご提案内容で金額に幅はあったのですが、今回は機能のブラッシュアップやバグ修正もお願いしたかったので、それも含めてご提案していただいた方に発注しました。
https://crowdworks.jp/public/employees/1307

価格は3万円
日本語化だけならもう少し安く抑えられたと思います。

で、発注後すぐに日本語化されてきました。
慣れてる人だとすぐできるようですね。

あといくつか機能追加もしてもらいまして、予定の10日間から大幅前倒しの4日間で納品していただきました。

最初から高いクオリティでしかも超速対応。
海外との比較で価格が多少高くなろうが、こういうところに大きな価値があります。

そこを重視せず極力費用をかけないのであれば、日本語が堪能な外国人も世界にはたくさんいるようなので、海外のクラウドソーシングサービスで日本語化をするのも良いかもしれないです。

海外でアプリを作ってもらった後の日本語化について方策を検討されている方の参考になれば。

このエントリーをはてなブックマークに追加

「ねちゃったー」のiPhoneへの移植をFreelancer.comを使ってやってみた。

2010年にAndroid版の「ねちゃったー」をリリースしました。
思いがけずそこそこの反応が得られていくにつれ、iPhone版をリリースしたい気持ちが出てきたのですがObjective-Cがまったく分からず諦めていました。

そんな中、今回クラウドソーシングの利用実験に参加する機会に恵まれ、「ねちゃったー」をiPhoneに移植することを題材に選びました。

予算は限られているので国内サービスの利用はできず、以前利用したFreelancer.comを利用することにしました。
こんな感じ↓で募集しました。
https://www.freelancer.com/projects/Java-iPhone/Convert-Android-app-iOS-app.html

いろんな国の人から応募がありましたが、なかなかポートフォリオの粉飾が疑われる人も散見され、それがある特定の国の人ばかりだったのでその国の方は応募内容を見ずに無条件で無視しました。
(だってさ、例えばリアルサッカー(https://itunes.apple.com/jp/app/id533391633)を開発しました!っていう人がいて、それって携わったのかもしれないけどよく聞く「アレオレ詐欺」に近いでしょw)

結局、提示価格とポートフォリオを判断基準として、インドの方にお願いすることにしました。
この方↓です。
https://www.freelancer.com/u/kantisuthar.html

価格は300ドル!(その後仕様追加により360ドルになりました。)

移植とはいえ言語が違うので実質的な新規開発であり、この値段は破格だと思います。
移植の良いところは仕様の説明があまりいらないことくらい。

で、上がってきた初版がこれ↓

正直、これはないで、というデキ。
まずどうやってアラームを追加するか分からない。
色々画面を触ってると、画面一番下のグレーのエリアをタップするとアラーム追加ボタンと設定ボタンが表示されました。

これは僕の説明不足だったせいもあり、元のAndroid版の画面がこれ↓

この場合、端末のmenuボタンを押すと画面下にアラーム追加ボタンと設定ボタンが表示されます。
つまり動作的には似てるといえば似てます。
でもそこはいくら説明不足とはいえ、OSによる操作系の違いとして、iOS標準の操作ができるようにしてほしかった。

なので、その他諸々の仕様変更をお願いしたところ、出てきたのがこれ↓

アラームのリストの一番下にアラーム追加ボタンを常に表示させるようにし、設定変更は画面上のボタンからできるようにしてもらいました。
ここまで到達するのに1ヶ月。応募時点では8日でできる、とのことでしたが。。。

納期については目をつぶるとして、最終的な成果物には満足なレベルに達しました。

そして、この人の良いところは、納品後のサポートも追加料金なしでしてくれるところ。
僕のテスト不足により納品前には発見できなかったバグを数時間で修正してくれました。
今後App Storeに出してrejectされた場合にも対応してくれるそう。
最初の成果物のクオリティにはビックリしたけど、ここまで責任感を持って対応してくれるなら安心です。

海外クラウドソーシングを使ってアプリを作ることをご検討の方の参考になれば。

※なお、まだApp Storeには上げていません。
このエントリーをはてなブックマークに追加

2013年2月17日日曜日

ボクシング採点アプリ「採点しようぜ」、リリースされました!

iPhoneユーザーとの親和性など無視して、テレビでボクシングをしてたのを見たノリで作ったアプリ「採点しようぜ」が、一度rejectはされましたが、とうとうReady for Saleになりました。

https://itunes.apple.com/jp/app/score-it!/id598645424

こういうアプリは100%一般ウケしないのでどうやって認知度を広げようか考え中。

このエントリーをはてなブックマークに追加

2013年2月15日金曜日

Parse.comでJavaScript SDKを使って値をインクリメントする方法

備忘録なので解説なしの超簡略版。

Documentを読んでもよく分からなかったので残しておきます。

<html>
  <head>
    <script src="http://www.parsecdn.com/js/parse-1.2.1.min.js"></script>
    <script src="jquery.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        Parse.initialize(
          "操作したいアプリのApplication ID",
          "操作したいアプリのJavascript Key");
        $('#testButton').on('click', function(){
          // 操作したいクラス(テーブルみたいなもの)の準備
          var UserObject = Parse.Object.extend("クラス名");
          var userObject = new UserObject();
          // インクリメントしたいレコードの主キー(objectId)をセット
          userObject.set("objectId", "主キーの値");
          // インクリメントしたいカラム名を使ってコール
          userObject.increment("カラム名");
          // コミット
          userObject.save({
            success: function(object) {
              alert("yay! it worked");
            }
          });
        });
      });
    </script>
  </head>
  <body>
    <button id="testButton">test</button>
  </body>
</html>
このエントリーをはてなブックマークに追加

2013年2月14日木曜日

Parse.comが超絶便利な件

Parse.comは、いわゆるBaaS(Backend as a Service)にカテゴライズされるサービスです。

BaaSって、要はAWSみたいなIaaSやPaaSの上に開発者が何もしなくても既にDBサーバーが動いていて、そのDBサーバーにアクセスできるAPIが提供されていて、さらにユーザー登録や認証ができるAPIも提供されているものです。
SaaSからソフトウェアを取り除いてフレームワークだけ残した感じです。

何に使うのかというと、超簡単に言うと、スマホアプリを作る際、ゲームでいうスコアボードのようなユーザー間で共有する情報の保存場所として使います。

サーバー側のサービス(アプリからのアウトプットを受け取ってDBに入れる、とか)を作るのが、だいたい動きは同じでも細かく違ったりして毎回はめんどくさいので、Parse.comのようなBaaSが便利なのです。

日本語の記事を探してもまだまだ少ないので、日本での盛り上がりは先なんでしょうけど。

このエントリーをはてなブックマークに追加

2013年2月8日金曜日

In Reviewになった!しかし即reject!

午前3時ちょうどに「In Review」になった旨の通知が来てたことに今朝気づいた。
その1時間半後の午前4時31分にAppleからもう一通、「App Submission Feedback」という件名のメールが来てた。

中を見てみた。

Your app アプリ名 has been reviewed, but we are unable to post this version. For details, or to directly contact the App Review team, visit the Resolution Center in iTunes Connect.

いきなりrejectかよorz

というわけで、今からその理由を探りにiTunes Connectを見に行く。

【追記】
理由は、アプリ自身がどうのこうのではなく、全ユーザー対象のアプリで申請してるのに、広告にいかがわしいやつがあるよ、っていうことでした。
確かに出会い系サイトのバナーが出てた。
スクリーンショットを差し替えたらOKっぽいので広告が出ていないスクリーンショットにしよう。

このエントリーをはてなブックマークに追加

2013年2月1日金曜日

ボクシングの採点アプリをAppStoreに申請しました。

Android版で先にリリースしていたボクシングの採点アプリをiOSに移植して、AppStoreに申請しました。
これが初iOSアプリです。
無事一発で審査に通るでしょうかね。

しかし、Androidに比べるとStoreにアップロードするまでが格段にめんどくさい!

これが2月1日の出来事。
すぐに「Waiting For Review」になったが、これが次に「In Review」になるらしい。
いつになることやら。

このエントリーをはてなブックマークに追加

2013年1月25日金曜日

PhoneGapでAdMobを使う(Android版)

PhoneGapでアプリを作って広告収入でお小遣いが入ればいいな、ということで、そのやり方の紹介です。

PhoneGapでアプリを作るときに使う技術って、基本的にはHTML+JavaScript+CSSなので、ワンソースでiOSアプリもAndroidアプリも作れて、めっちゃ簡単。

でも、広告掲載みたいな外部SDKを使うとなるとワンソースじゃ無理なので、OSごとの実装が必要になります。

で、PhoneGapで作ったiOSアプリにAdMobを載っける方法はどなたかがまとめておられます。
http://webdelog.info/2012/09/iphone/cordova-phonegap-ios-admob/

それのAndroid版が日本語で見つからなかったのでここでまとめておきます。
といっても、
https://github.com/phonegap/phonegap/wiki/In-App-Advertisements
に載ってるの抜粋&翻訳です。

SDKのダウンロードとかパブリッシャーIDの発行とかは省略します。

まず、AndroidManifest.xmlのandroid:targetSdkVersionの値が"13"以上になっていることを確認して、applicationタグで囲まれた部分に、
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.google.ads.AdActivity"></activity>
を追加。

で、Javaの方にある○○Activity(だいたい、アプリケーション名+Activityっていう名前)に、
public class ○○Activity extends DroidGap {
    private Handler mHandler = new Handler();
    private AdView adView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
        mHandler.postDelayed(new Runnable() {
            public void run() {
                doAdMob();
            }
        }, 5000);
    }
    private void doAdMob() {
        adView = new AdView(this, AdSize.BANNER, "パブリッシャーID");
        LinearLayout layout = super.root;
        layout.addView(adView);
        layout.setHorizontalGravity(android.view.Gravity.CENTER_HORIZONTAL);
        AdRequest request = new AdRequest();
        adView.loadAd(request);
    }
}
を追加。

でもこれはLocalStorageを使う場合の実装。
広告を遅らせて表示することでLocalStorageの情報が消えないらしい。
LocalStorageを使ってない場合の実装は、参照元のページを見てください。

このエントリーをはてなブックマークに追加

2013年1月24日木曜日

AndroidではAdmobメディエーションでi-mobileが使えない件 → 使えるようになりました(2013/01/24)

Admobメディエーションで広告ネットワークの追加ボタンを押したら使えるアドネットワークの一覧が表示されて、i-mobileもそこに名前が出てくる。

選んだら、設定するIDが3つあるので同じ名前の別物ってわけでもなさそう。

でも、設定してSDK入れて準備できたとおもいきや、ビルドするとAdapterクラスが見つからないというエラーが。
なるほど、アダプターを忘れてたのね、とAdMobのサードパーティのSDKやAdapterがダウンロードできるページに行っても、i-mobileが見つからない。

なので、問い合わせました。
すげー早いレスポンスで感動したんですが、回答にはがっくり。
Androidは未対応です、と。

というわけで、同じような現象が起こったらあきらめろ、という結論でお願いします。

【追記】
と書いた数時間後に、使えるようになりました。
記事を参照してください。
すみません。

このエントリーをはてなブックマークに追加

[PhoneGap2.3.0]ボクシングの採点アプリ、できました。

とりあえずPhoneGapでアプリを作ってみようと思い、自分でもニーズはなかったのですが、たまたまテレビでボクシングをやってたので、それに影響されてラウンドごとに採点して記録するアプリを作りました。

昔、よく採点してたよなぁ。山本に影響されて。

それはともかく、ディープなボクシング好きなら間違いなく誰もがやっているであろう、テレビや会場で試合観戦しながらの採点。
でも、こんなにスマホを持ってる人が増えてるのにわざわざチラシの裏に書いてる。
しかも調べてみたらまともな採点アプリがない。(「ニーズがないからや」とか言わない。)

というわけで、PhoneGapの勉強がてら作りました。

興味があったらダウンロードして使ってください。

「採点しようぜ」
-Android版
https://play.google.com/store/apps/details?id=com.kyosuke25.socialboxing
-iPhone版
開発中

このエントリーをはてなブックマークに追加

[PhoneGap2.3.0]navigator.notification.confirm は要注意!

PhoneGapで、navigator.notification.confirmを使ってダイアログを表示させ、OKを押したら画面遷移、Cancelを押したらその画面のままという実装をするときの注意点です。
JavaScriptにあるconfirmメソッドと同じ挙動だと思って使うとバグになりますよ、っていう話です。

■confirm()を使う場合

-JavaScript
$('#okButton').click(function(){
    if(!confirm('次の画面に移っていい?')) {
        return false;
    }
});

-HTML
<a data-role="button" href="next.html" id="okButton" >次の画面</a>

クリックイベントがあったらconfirmを呼んで、Cancelを押された時はfalseを返すようにすれば次の画面には行かない。

■同じようなノリでnotification.confirmを使った場合(ダメな例)


-JavaScript
$('#okButton').click(function(){
    navigator.notification.confirm(
        '次の画面に移っていい?',
        function(buttonIndex){ // ★押された時の動作
            if(buttonIndex == 2) {
                return false;
            }
        },
        '確認',
        'はい,いいえ'
    );
});

-HTML
<a data-role="button" href="next.html" id="okButton" >次の画面</a>

このとき、「はい」「いいえ」のボタンを押す前に次の画面に行っちゃいます。

なぜか。

公式のAPIドキュメントを読むと、notification.confirmは非同期なんだと。

つまり、上のコードの★に書いた部分を実行する前に、clickイベントが終わってしまいます。

■notification.confirmを使って意図通り動かす場合

-JavaScript
$('#okButton').click(function(){
    navigator.notification.confirm(
        '次の画面に移っていい?',
        function(buttonIndex){ // ★押された時の動作
            if(buttonIndex == 1) { // 「はい」が押された時
                window.location.href('next.html');
            } else { // 「いいえ」が押された時
                // 何もしない
            }
        },
        '確認',
        'はい,いいえ'
    );
    return false; // 念のため
});
-HTML
<a data-role="button" href="#" id="okButton" >次の画面</a>

つまり、勝手に次の画面に行かないようにaタグには次の画面のURLは入れないようにして、コールバック関数の中でムリヤリ次の画面に飛ばす、って感じ。

でもやっぱり気持ち悪いので、別のソリューションがあったら教えてください。
あと、return false;の場所が微妙な気もする。
このエントリーをはてなブックマークに追加

2013年1月20日日曜日

[PhoneGap2.3.0]PhoneGapでiOS用とAndroid用のコードはそのまま共有できない!

PhoneGapは、HTML+JavaScript+CSSを使ってワンソースでiOSアプリとAndroidアプリが作れるよ、っていう結構凄い奴。

でも、その「ワンソース」っていうのは一から十まで同じソースが使えるわけじゃないから要注意。

まあ、AdMobとかの広告表示用のSDKは、iOS用とAndroid用で別々になってるから普通に分かる。

けど、ハマったのが、PhoneGap APIを使ってる場合は、Android用に作った物をそのままコピペしてMacにコピーしても(その逆も)思惑通りには動かないってこと。
つまり、実は本体部分のHTML・JavaScript・CSSをそのままコピーしたらダメ。

どうやらdevicereadyイベントがbindできないかfireしない。
そうなると、navigator.notification.confirm("メッセージ", function(){// something}, "タイトル");がAndroidでは動いたのにiOSでは動かない、ってことが起きる。

その理由は、phonegap.jsがiOS版とAndroid版で違うためらしい。
iOS用に作る場合はスクリプトを叩いてプロジェクトを作るけど、このときにiOS用に一部変更してるみたい。

こんなことで一日つぶすとは・・・。

このエントリーをはてなブックマークに追加