将服务器迁移到Parse Server并实现APNS和GCM通知

这是一个截至2016年3月19日时点的备忘录。

由于Parse.com将于2017年1月停止服务,因此需要考虑进行迁移,随之而来的是逐渐临近的关闭期限。

尽快办理。
2016/04/28 请自行转移到MongoDB。
2016/07/28 请自行准备服务器并更新ClientApp版本。
逐渐从数据库中逐步减弱。

由于我方和parse.com之前只使用通知功能,所以只要能通知就可以了。但最初的parse server并不支持通知。但是,后来发现通知功能也被加入了,所以应该是可以了吧。

Parse服务器采用了node.js和MongoDB的结构。现在它可以在任何地方运行。
关于通知方面,似乎使用了node-apn和node-gcm。
由于这些都是相当流行的工具,应该不会有问题。

只需要服务器能够接收令牌、发送到MongoDB、APNS和GCM,而且不需要太高的实时性,所以只需准备满足这些需求的服务器。

如果你想要摆出一副炫耀姿态,那就使用AWS、Azure、GCP、mLab、ObjectRocket等服务吧。
如果你真的需要到这种程度,我觉得你根本就不会使用parse.com之类的服务。

如果想将通知改为使用AWS SNS,可能需要修改适配器,或稍等一下可能就会出现。
不过由于只是访问SNS服务器,或访问APNS、GCM服务器的差异,所以不确定是否有必要使用SNS。

安装

按照页面上的指示,准备Parse Server和MongoDB。

$ npm install -g parse-server mongodb-runner
$ mongodb-runner start

由于上述的MongoDB主要用于测试目的,因此可以单独建立一个新环境。

解析服务器设置

由于需要指定的内容较多,因此编写设置文件并使用它。

-$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上配置的文件相同。

无论是appId还是masterKey都可以,但请务必记住,因为我们将在接下来的内容中使用。

翻译:港口

为允许外部访问,可以将 Parse Server 默认的 1337 端口进行配置。

通信测试

如果按照页面上的curl示例进行请求,将数据注册到MongoDB,并且能够返回结果,那就可以了。

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客户端来确认,这个程度已经足够了。

客户修正

只要到这里,其他事情就按照页面上的设置进行操作,但是还需要进行通知设置和确认。

苹果操作系统

如果是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.initializeWithConfiguration代替先前使用的Parse.setApplicationId,并指定API目标。

安卓操作系统

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.

斜杠底線很重要!

考试

首先进行以上的更改,然后进行实际的机器执行。
访问解析服务器,确认令牌是否已经注册到MongoDB中。

测试推送是否成功,如果收到实际设备的通知就说明没问题。

$ 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

 

    1. 将parse.com的数据库连接切换到自己的MongoDB

 

    1. 准备自己的parse服务器

 

    1. 升级客户端以使用自己的parse服务器API

 

    最终parse.com将终止

如果有机会稍后报告,我想说自行切换到MongoDB连接的部分似乎有些可疑。

广告
将在 10 秒后关闭
bannerAds