将服务器迁移到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
转型计划
请参考前述的页面。
大致分类如下所示的任务
-
- 准备自己的MongoDB
-
- 将parse.com的数据库连接切换到自己的MongoDB
-
- 准备自己的parse服务器
-
- 升级客户端以使用自己的parse服务器API
- 最终parse.com将终止
如果有机会稍后报告,我想说自行切换到MongoDB连接的部分似乎有些可疑。