什么是Parse?
官網:https://docs.parseplatform.org/
Github:https://github.com/parse-community
Parse是一個移動后端,最初由提供商Parse Inc開發。該公司于2013年被Facebook收購,并于2017年1月關閉。繼2016年宣布即將關閉后,該平臺隨后開源。 由于托管服務被關閉,Parse Platform已經發展成為一個開源社區,擁有自己的博客,文檔和社區論壇。
Parse是一個基于云端的后端管理平臺。對于開發者而言,Parse提供后端的一站式和一攬子服務:服務器配置、數據庫管理、API、影音文件存儲,實時消息推送、客戶數據分析統計、等等。這樣,開發者只需要處理好前端/客戶端/手機端的開發,將后端放心的交給Parse即可。目前Parse支持超過50萬個App。摘自淺談 Parse
Parse可以讓一個作為Android/IOS開發的你,不用后臺開發人員配合就可以處理后臺數據,并且其有專門的用戶系統,消息推送功功能等等,而且API簡單易用,雖然坑還是有,但是還是一個很值得Android開發者入手的一個框架。
Parse目前支持以下平臺語言:
服務器搭建
環境
- 本人服務器為阿里云CentOs7.4系統服務器
- XShell6
這篇文章僅記錄Parse后臺搭建與在Android中的使用,更詳細的使用介紹如果后面有時間還會總結
首先在root下創建parse目錄,然后進入到parse目錄
安裝nodejs
wget https://npm.taobao.org/mirrors/node/v12.0.0/node-v12.0.0-linux-x64.tar.xz
版本看你需要什么版本,建議8.0.0以上,Parse后臺需要Node4.3以上版本
下載完成后可以看到:
解壓
tar -xvf node-v12.0.0-linux-x64.tar.xz
解壓后可以看到:
將原本壓縮文件刪除
rm node-v12.0.0-linux-x64.tar.xz -f
將node-v12.0.0-linux-x64文件夾重新命名為node:
mv node-v12.0.0-linux-x64/ node
現在該目錄下為:
進入到node的bin目錄,執行以下命令將node和npm設置為全局命令:
ln -s /root/parse/node/bin/node /usr/local/bin/node
ln -s /root/parse/node/bin/npm /usr/local/bin/npm
我們 查看 /usr/locl/bin目錄可以看到已經成功了:
接著我們可以在終端任何地方通過npm命令下載相關的內容了
安裝MongoDB
parse服務器后臺需要搭配MongoDB,且版本要求為2.6.X,3.0.X,3.2.X
我們安裝3.2.4版本
首先在parse目錄下創建mongodb目錄,現在/root/parse目錄就有兩個目錄了:
進入mongodb目錄,輸入下載命令下載壓縮包:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.4.tgz
下載完成后解壓:
tar -xvf mongodb-linux-x86_64-rhel70-3.2.4.tgz
解壓完成后刪除壓縮包:
rm mongodb-linux-x86_64-rhel70-3.2.4.tgz -f
現在目錄為:
再執行命令將mongodb-linux-x86_64-rhel70-3.2.4目錄所有東西剪切到mongodb目錄:
mv mongodb-linux-x86_64-rhel70-3.2.4/* ./
rm mongodb-linux-x86_64-rhel70-3.2.4/ -rf
最后mongodb目錄下為:
在mongodb目錄創建一個目錄data:
mkdir data
cd data //進入data目錄
//創建兩個目錄
mkdir db //存放數據文件
mkdir logs //存放日志文件
再進入到mongodb的bin目錄,可以看到該目錄下有以下命令文件:
進入到parse-server/bin目錄,執行以下命令將mongo設置為全局命令:
ln -s /root/parse/mongodb/bin/mongo /usr/local/bin/mongo
在這里我們需要創建一個mongodb的配置文件(怎么創建文件不用說了吧??):
dbpath = /root/parse/mongodb/data/db
logpath = /root/parse/mongodb/data/logs/mongodb.log
port = 27017
fork = true
logappend=true
- dbpath:設置數據文件存放目錄
- logpath:設置日志文件的存放目錄及其日志文件名
- port:設置端口號(默認為27017)
- fork:設置為以守護進程的方式運行,即在后臺運行
- logappend:開啟日志追加添加日志
啟動mongodb
./mongod --config mongodb.conf
//下面為成功后的返回
[root@izj6c0bdyow5dsyv3ptlfez bin]# ./mongod --config mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1696
child process started successfully, parent exiting
輸入命令查看端口:
netstat -tunpl
可以看到mongodb已經啟動且在監聽27017端口:
最后在瀏覽器輸入:
http://{你的服務器ip}:27017/
可以看到以下信息:
注意:如果你用的服務器需要配置網絡安全組的話,請到添加一個27017端口的網絡安全組,否則該端口沒有訪問權限。且測試完之后最好關閉該端口的外網訪問權限,否則端口有可能被攻擊。曾經本人團隊由于服務器開啟了27017端口的外網訪問權限,導致數據庫被黑,要給黑客錢才能拿回舊數據,所幸當時處于測試階段,造成不了什么損失。
安裝Parse后臺
可在任何目錄下執行安裝parse-server命令:
npm install -g parse-server
最后會下載在/root/parse/node/lib/node_modules目錄下:
進入到parse-server/bin目錄,執行以下命令將parse-server設置為全局命令:
ln -s /root/parse/node/lib/node_modules/parse-server/bin/parse-server /usr/local/bin/parse-server
然后啟動parse后臺服務:
parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://localhost/parse &
- mongodb://localhost/parse 配置在mongodb的parse數據庫下
- & 代表讓parse-server在后臺運行,不阻塞當前終端
執行成功后可以看到以下信息:
我們可以執行mongo命令查看數據庫:
mongo
> show dbs
安裝Parse管理面板
執行以下命令安裝管理面板
npm install -g parse-dashboard
會下載在/root/parse/node/lib/node_modules目錄下:
進入到parse-dashboard/bin目錄,創建配置文件parse-dashboard.conf(可隨便命名):
{
"apps": [
{
"serverURL": "http://localhost:1337/parse",
"appId": "myappid",
"masterKey": "myappkey",
"appName": "MyApp"
}
],
"users": [
{
"user":"admin",
"pass":"admin"
}
]
}
- serverURL:parse服務器地址
- appid:你的應用id
- masterKey:你的應用的masterKey
- appName:應用名稱
- users:管理面板的登錄賬號
關于配置文件,目前上面例子只是一個最簡單的單個app管理面板,更多相關配置可以看:https://github.com/parse-community/parse-dashboard
啟動parse-dashboard服務:
./parse-dashboard --config parse-dashboard.conf --allowInsecureHTTP &
- allowInsecureHTTP:允許遠程訪問http協議的管理面板
- & 后臺啟動,不阻塞當前終端進程
成功后會提示:
阿里云這邊需要開啟安全組允許外網4040端口:
最后,在瀏覽器輸入
http://{你的服務器ip}:4040/
可以看到以下內容證明配置成功:
安裝總結
主要需要四步:
- 安裝nodejs
- 安裝mongodb
- 安裝parse-server
- 安裝pase-dashboard
使用問題
我們在終端調用命令:
parse-server ... //啟動parse服務
parse-dashboard ... //啟動管理面板服務
啟動parse服務和管理面板服務后,一旦關閉終端,我這里是關閉XShell6,再輸入管理面板的ip+端口會發現無法訪問,重新連接XShell會發現parse-server進程和parse-dashboard進程都被殺掉了。后面發現,僅僅通過&無法保證在終端中創建的進程不被殺掉,可以通過&+()方式,或者setsid將命令提交后不受本地終端關閉影響。
Android端代碼
在root build.gradle文件添加:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
在你項目例如app下的build.gradle添加:
dependencies {
implementation "com.github.parse-community.Parse-SDK-Android:parse:1.20.0"
}
創建一個用戶類:
@ParseClassName("user")
public class UserObject extends ParseObject {
public static String USER_ID = "user_id";
public static String USER_NAME = "user_name";
public void setUserId(String userId){
if (userId != null){
put(USER_ID, userId);
}
}
public String getUserId() {
return getString(USER_ID);
}
public void setUserName(String userName) {
if (userName != null){
put(USER_NAME, userName);
}
}
public String getUserName() {
return getString(USER_NAME);
}
}
- ParseClassName注釋:類似于數據庫中的表名,數據庫中會有一個類與當前類匹配
初始化:
ParseObject.registerSubclass(UserObject.class);
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId("YOUR_APP_ID")
// if defined
.clientKey("YOUR_CLIENT_KEY")
.server("http://{YOUR_SERVER_IP}:1337/parse/")
.build()
);
- ParseObject.registerSubclass:該類只有經過注冊了才能使用,會聯系parse數據庫的user類
插入數據:
UserObject userObject = new UserObject();
userObject.setUserId("10000");
userObject.setUserName("SamLeung");
userObject.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
Log.e("TAG", "save user done: " + e != null ? "success" : e.getMessage());
}
});
- e為null則代表無異常,保存成功
- e不為null則代表異常,保存失敗
執行后可以在DashBoard中看到保存的內容:
更多Android端API可參考:https://docs.parseplatform.org/android/guide/