Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

parse.comでプッシュ通知を実装してみた

どっかにちゃんと書いてあったけど割とハマった。

書き出し時にキーチェーンアクセスの分類->自分の証明書のところを選択しておかないと、書き出せないようだ。

Parse.comのサイトからはプッシュ通知ができるけど、アプリ側から発行できない

Parse.comのSetting->Push Notification->Client push enabled?
をONにする必要があった。設定していないと
送信リクエストがParse.com上では確認できるが、送信対象が0と表示されたり、Invalid Targetと表示されたりして、実際には届かない。

自分のアプリではプッシュ通知が受け取れたけど、Testflightで配布したアプリだとプッシュ通知受け取れない

プロビジョニングプロファイルの問題。配布用のプロファイルをTestflightでは使っていて、Apple Push Certificateの項目で設定した証明書が開発用のものにしていたのが原因だった。

無料版では、1つしか証明書が設定出来ないのでとりあえず配布用の証明書を設定した。

まとめ

すごく便利なのでみんな使おう!

プッシュ通知を送信する際に条件をつけられるので特定のユーザーやグループに対して送信する事が簡単に出来る。
また、ブラウザ上でも簡単にプッシュ通知を送信でき、送信リクエストも確認できるのでデバッグが楽チンでした

parse.comでプッシュ通知を実装してみた

AndroidからiOSに向かってプッシュ通知が出したかったので、parse.comを使ってみました。
ほとんどチュートリアル通りでサクサク実装できてparse.comすごく便利。ロックインされる問題はあるものの、スタートアップとか個人でやる場合は、どんどん使っていいんじゃないかなと。

チュートリアルをまずやりましょう

iOS版はここ
https://www.parse.com/tutorials/ios-push-notifications

Android版はここ
https://www.parse.com/tutorials/android-push-notifications


最初サインインしたときはもっとスマートなチュートリアルに案内されたんだけど、リンクが見つからない・・・。


Androidチュートリアルは特にハマるところなく出来た。
iOS版は証明書のやりとりがあったりするのでちょっと面倒でした。AppIDをワイルドカードにしてるとダメなので再発行したり色々ごにょごにょ。

iOS版の導入に際して
http://tech.aainc.co.jp/archives/3145
も参考にしました。
cocoapodがされてるようでセットアップ楽チン。

特にハマったところ

証明書を書き出す際に、p12ファイルが選択できない

WiiリモコンをAndroidで動かしたい(楽チン編)

目標

Wiiリモコンを使って自作アプリを動かしたい。あと出来るだけ手抜きで動作検証したい。

  1. Wiiリモコンをキーボードとして認識させるアプリをインストールする
  2. キーボードとして動作しているか確認する

※動作確認したのは、Xperia ray(Android2.3.4)です。特に特殊なことはしてないはずなので他のバージョンでも動作はするはず。しなかったら教えて欲しいです。

Wiiリモコンをキーボードとして認識させるアプリをインストールする

いくつかアプリはあるようですが
http://android-k.com/story/3029/
を参考にしつつ、SimpleWiiControllerをインストールした。

ダウンロードはこちらから

インストールしてペアリングしたら、無事認識されました。

キーボードとして動作しているか確認する

一行もコードを書きたくないのでこれも手抜きをした。

githubに上がっているキー入力を画面に出すだけのテストアプリをインストールして、wiiリモコンのボタンを押したときに適当な値が表示されるのを確認できました。

ダウンロードはこちらから

ソースコードは↓のような感じみたいなので、コピーして自分のアプリに組み込むのは簡単かと
https://github.com/chrisboyle/keytest/blob/master/src/name/boyle/chris/keytest/KeyTest.java

まとめ

無事、WiiリモコンAndroidで認識させて自分のアプリに組み込めそうなことを確認出来た。

もし、別のアプリをインストールしたくないとかあれば
http://wiibrew.org/wiki/Wiimote
とか見つつ、ペアリングの方法とか見て実装すれば出来るのではなかろうか?(試していません)

StoryboardでUIImagePickerControllerを扱いたい

答えはこちら
http://stackoverflow.com/questions/13713242/prepareforsegue-with-uiimagepickercontroller

  1. storyboardでUIViewControllerを配置
  2. 配置したUIViewControllerのCustom Classの欄にUIImagePickerControllerと入力する
  3. prepareForSegueで遷移するときに捕まえて設定をする

これだけでうまく行きました。Storyboardで管理できる画面が増えるとViewを分離できる部分が多くなるので便利

NavigationControllerに接続していたのでこんな感じでprepareForSegueの中身を書きました。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if( [segue.identifier isEqualToString:@"cameraSegue"] )
    {
        UINavigationController* controller = segue.destinationViewController;
        UIImagePickerController* pickerController = (UIImagePickerController*)controller.topViewController;
        // ここで好きなように設定をする
    }
}

UICollectionViewのリロードは表示されてるセルしか実際には実行されない

で、UICollectionViewを使ってデータを表示しているときに

セルを再利用するので、セルの中身を非同期で読み込んだりしていると意図しないセルの中身を書き換えたりしまうことがある。
セルを保持しないようにしないといけないので、リロードでうまくいくか試してみた。

UICollectionView:reloadItemsAtIndexPaths
で、リロードをするときに画面に表示されてないセルに対してリロードを実行してもcellForItemAtIndexPathが呼ばれなかった。

セルを保持しないでどんどんリロードしてもよさそう。

Promiseの実装練習

翻訳: ”命令型のコールバック、関数型のプロミス: Node が逸した最大の機会” by James Coglan
これのコードを読んでいてイマイチ理解が出来なかったので、実行出来る形にコードを補完して写経してみた。

元記事のコードに出てくるPromiseクラスの完全版はたぶんこれ→ https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/promise.js


最後の方まで気づかなかったので、とりあえず簡単な自作Promiseクラスを実装したものをここに→ https://github.com/nilfs/promise-sample


値の依存関係に注目したプログラミングはもう少し練習して実践に生かして行きたいところ。


Node.jsは初めてだったけど、今回はサーバーコードじゃなかったし、firebug上でちょっと書くの余り変わらなかったな