将您的 Parse Android 应用迁移到 Firebase

如果您是一位 Parse 用户,正在寻找后端即服务解决方案,用以替代以前的解决方案,Firebase 可能是您的 Android 应用的理想选择。

本指南介绍如何将特定服务集成到您的应用中。如需查看 Firebase 的基本设置说明,请参阅 Android 设置指南。

Google Analytics

Google Analytics 是一款免费的应用衡量解决方案,可提供关于应用使用情况和用户互动程度的深度分析。Analytics 与各种 Firebase 功能集成,可以就多达 500 种不同事件(您可以利用 Firebase SDK 定义这些事件)无限制地向您提供报告。

如需了解详情,请参阅 Google Analytics 文档

建议的迁移策略

使用不同的分析提供程序是非常普遍的现象,Google Analytics 能够轻松适应这种情况。只需将 Analytics 添加至您的应用,它即会自动收集事件和用户属性(如首次打开、应用更新、设备型号、年龄等),让您从中受益。

对于自定义的事件和用户属性,您可采取双写策略,同时使用 Parse Analytics 和 Google Analytics 记录事件和属性,进而逐步过渡到新解决方案。

代码比较

Parse Analytics

// Start collecting data
ParseAnalytics.trackAppOpenedInBackground(getIntent());

Map<String, String> dimensions = new HashMap<String, String>();
// Define ranges to bucket data points into meaningful segments
dimensions.put("priceRange", "1000-1500");
// Did the user filter the query?
dimensions.put("source", "craigslist");
// Do searches happen more often on weekdays or weekends?
dimensions.put("dayType", "weekday");

// Send the dimensions to Parse along with the 'search' event
ParseAnalytics.trackEvent("search", dimensions);

Google Analytics

// Obtain the FirebaseAnalytics instance and start collecting data
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

Bundle params = new Bundle();
// Define ranges to bucket data points into meaningful segments
params.putString("priceRange", "1000-1500");
// Did the user filter the query?
params.putString("source", "craigslist");
// Do searches happen more often on weekdays or weekends?
params.putString("dayType", "weekday");

// Send the event
mFirebaseAnalytics.logEvent("search", params);

Firebase Realtime Database

Firebase Realtime Database 是一种 NoSQL 云端托管数据库。数据以 JSON 格式存储并实时同步到所连接的每个客户端。

如需了解详情,请参阅 Firebase Realtime Database 文档

与 Parse 数据的差异

对象

在 Parse 中,您存储的是一个 ParseObject 或其子类,其中包含 JSON 兼容数据的键值对。数据是无架构的,这意味着您无需指定在每个 ParseObject 上存在什么键。

所有 Firebase Realtime Database 数据均被存储为 JSON 对象,没有与 ParseObject 对应的形式;您只需将数据写入与可用 JSON 类型对应的不同类型的 JSON 树值。您可以使用 Java 对象简化该数据库的读写操作。

以下示例说明如何保存一款游戏的最高得分:

Parse
@ParseClassName("GameScore")
public class GameScore {
        public GameScore() {}
        public GameScore(Long score, String playerName, Boolean cheatMode) {
            setScore(score);
            setPlayerName(playerName);
            setCheatMode(cheatMode);
        }

        public void setScore(Long score) {
            set("score", score);
        }

        public Long getScore() {
            return getLong("score");
        }

        public void setPlayerName(String playerName) {
            set("playerName", playerName);
        }

        public String getPlayerName() {
            return getString("playerName");
        }

        public void setCheatMode(Boolean cheatMode) {
            return set("cheatMode", cheatMode);
        }

        public Boolean getCheatMode() {
            return getBoolean("cheatMode");
        }
}

// Must call Parse.registerSubclass(GameScore.class) in Application.onCreate
GameScore gameScore = new GameScore(1337, "Sean Plott", false);
gameScore.saveInBackground();
Firebase
// Assuming we defined the GameScore class as:
public class GameScore {
        private Long score;