これは2016/03/19時点での忘備録
Parse.comが2017/01終了、それに伴って徐々にクローズ時期が迫っているようなので移行の検討
asapですって。
2016/04/28 自前MongoDBにしなされ
2016/07/28 自前server用意してClientAppをverupしなされ
DBからちみちみと弱めていくような。
当方、parse.comは通知のみに使用していたので、これだけでも通ればというところだったのですが、当初parse serverでは通知は未対応。
ですが、気がつけば通知の対応も入ってきていたのでこれでいけるかなと。
parse serverは、node.js + MongoDB の構成。イマドキどこでも動きますね。
通知には
node-apn https://github.com/argon/node-apn
node-gcm https://www.npmjs.com/package/node-gcm
を使用するようになっている模様。
これらはそれなりに使われているので問題なかろうかと。
サーバーは、tokenの受付、MongoDB、APNS,GCMへの送信が出来ればいいだけで、そんなに即時性もいらないので、そのあたりの要件を満たす程度のサーバーを用意。
仰々しく構えたいならAWSやAzure,GAP、DBにmLab,ObjectRocketなどを。
そこまで必要なレベルだったらそもそもparse.comなぞ使ってないと思われますが。
通知をAWS SNSにしたいならAdapterあたりを書き換えるかもう少し待てば出てくるかも。
とはいえSNSサーバーへアクセスするか、APNS,GCMサーバーへアクセスするかの違いでしか無くなってくるので、SNS使う必要があるかどうか分からないですが。
インストール
ページにある通りに、parse serverとMongoDBを用意
$ npm install -g parse-server mongodb-runner
$ mongodb-runner start
上記のMongoDBはテスト用途感強いので別途構築してもよい。
parse server 設定
指定する内容が多いので、設定ファイルを書いてそれを使用。
$parse-server config.json
config.json
{
"appId":"任意",
"masterKey":"任意",
"push": {
"android": {
"senderId": "GCMのSender-ID",
"apiKey":"GCMのAPI KEY"
},
"ios": {
"pfx": "APNS p12ファイルへのパス",
"bundleId": "com.xxx.xx バンドルID",
"production": true
}
}
}
p12ファイルはparse.comで設定したファイルと同様で、サーバーに置いておいてパス指定を通せばOK
appId,masterKeyは何でも構いませんが、以降で使うのでその時忘れないように。
ポート
parse serverはデフォルトで1337を使用するので、これを外部からアクセス出来るよう設定。
導通テスト
ページにある通りのcurlサンプルを叩いて、MongoDBに登録され、結果が帰ってくればOK
curl -X POST \
-H "X-Parse-Application-Id: APPLICATION_ID" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
http://サーバーIP:1337/parse/classes/GameScore
データ確認
parse.comには素晴らしいGUIがあったのですが、この程度ならMongoDBのGUIクライアント系で確認すれば十分です。
クライアント修正
ここまで通ればあとはページにある設定通りに事を運べはよいが、一応通知の設定・確認まで。
iOS
SDK 1.12.x 以降なら問題ないかと思われます。
// Parse.setApplicationId("xxx", clientKey:"xxx")
let configuration = ParseClientConfiguration {
$0.applicationId = "任意"
$0.clientKey = "任意"
$0.server = "http://サーバーIP:1337/parse"
}
Parse.initializeWithConfiguration(configuration)
初期化の際の以前使っていた Parse.setApplicationId の代わりに Parse.initializeWithConfiguration を用い、API先を指定します。
Android
SDK 1.13.x 以降かな
こちらも Parse.initialize していた所を変更
Parse.initialize(new Parse.Configuration.Builder(myContext)
.applicationId("任意")
.clientKey(null)
.server("http://サーバーIP/parse/") // The trailing slash is important.
The trailing slash is important!!
テスト
まず上記の変更をして、実機実行。
parse serverへアクセスされtokenがMongoDBに登録されているか確認。
その後、Pushのテスト。
これで実機に通知が来ればOK
$ curl -X POST \
-H "X-Parse-Application-Id: 任意" \
-H "X-Parse-Master-Key: 任意" \
-H "Content-Type: application/json" \
-d '{
"where": {
"deviceType": {
"$in": ["ios","android"]
}
},
"data": {
"title": "The Shining",
"alert": "All work and no play makes Jack a dull boy.",
"sound" : "default"
}
}'\ http://サーバーIP:1337/parse/push
移行スケジュール
前述のこちらのページを参照
ざくっと並べると以下の様なタスク
- 自前のMongoDBを用意
- parse.comでのDB接続を自前MongoDBに切替
- 自前parse serverを用意
- clientを自前pase server APIを叩くようにverup
- いずれparse.comが終了
自前MongoDBへ接続切替ってあたりが結構怪しいところですが、これはまた後日報告の機会があればと。