LoginSignup
14
12

More than 5 years have passed since last update.

parse serverに移行してAPNS,GCM通知

Posted at

これは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

移行スケジュール

前述のこちらのページを参照

ざくっと並べると以下の様なタスク

  1. 自前のMongoDBを用意
  2. parse.comでのDB接続を自前MongoDBに切替
  3. 自前parse serverを用意
  4. clientを自前pase server APIを叩くようにverup
  5. いずれparse.comが終了

自前MongoDBへ接続切替ってあたりが結構怪しいところですが、これはまた後日報告の機会があればと。

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12