如何将Firebase引用传递给另一个Android活动

4
我们有两个Android活动(活动A和活动B)。假设我们在活动A中实例化了Firebase引用。活动A还处理所有用户身份验证(Facebook,Google和电子邮件/密码)。从使用Android意图启动的活动A开始,活动B应使用Firebase引用来访问Firebase服务器上的一些数据。现在我想知道将Firebase ref从活动A发送到活动B的最佳设计是什么。
1.使用Java Serializable将Firebase引用与意图捆绑,并在Activity B中使用intent.getExtra()。 2.使用Android Parcelable将Firebase引用与意图捆绑,并在Activity B中使用intent.getExtra()。 3.在Android服务中初始化Firebase引用,并将每个活动绑定到该服务。 4.其他方法。

我会在下班后更新我的帖子,并附上一些相关的代码。 - Frostie
为什么要在活动之间发送Firebase引用?这对你有什么用处?在我的主活动(Activity A)中,我有一个存储在Firebase中的图像库。您可以在其中添加图像、编辑图像等。在我的第二个活动(Activity B)中,您可以使用相同的图像在Android surfaceview中制作图像组合,并将组合保存到Firebase中。但是,为了向surfaceview添加图像,Activity B还需要一个图像库(与Activity B中的图库相比具有不同的功能)。因此,Activity B还需要访问Firebase数据库。@ParagKadam - Frostie
在 Activity B 中创建一个新的 Firebase 引用,并使用此引用访问 Firebase 数据。这不会产生任何额外的开销。 - Parag Kadam
那将是理想的。但是认证方面怎么办呢?如果用户在Activity A中使用Firebase ref进行了身份验证,那么当他在使用在Activity B中实例化的不同Firebase ref实例时,他是否仍然被认证? - Frostie
Firebase文档中提到:“当用户进行身份验证时,默认会话长度为从初始身份验证开始的24小时。这意味着用户的身份验证状态将在页面加载之间自动保留。您可以通过导航到Firebase应用程序仪表板的“登录和身份验证”部分并在右上角配置“会话长度”下拉菜单来配置会话长度。每个身份验证提供程序都有一个可选的remember参数。” - Parag Kadam
显示剩余2条评论
1个回答

3

常见的做法是将数据的URL传递给新的活动。例如,可以参考Firebase Android Drawing示例中的此方法

private void openBoard(String key) {
    Log.i(TAG, "Opening board "+key);
    Toast.makeText(BoardListActivity.this, "Opening board: "+key, Toast.LENGTH_LONG).show();
    Intent intent = new Intent(this, DrawingActivity.class);
    intent.putExtra("FIREBASE_URL", FIREBASE_URL);
    intent.putExtra("BOARD_ID", key);
    startActivity(intent);
}

新的活动会读取URL并构建一个新的Firebase引用:
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    final String url = intent.getStringExtra("FIREBASE_URL");
    final String boardId = intent.getStringExtra("BOARD_ID");
    Log.i(TAG, "Adding DrawingView on "+url+" for boardId "+boardId);
    mFirebaseRef = new Firebase(url);

这些调用之间确实会维护认证状态。Firebase SDK 为应用程序会话维护与服务器的单个连接,而每个 Firebase 引用都是在此之上的轻量引用。


1
附加说明 - 由于我无法使用Firebase()(不可用),因此我检索了已经创建的Firebase实例(在主活动中), FirebaseApp firebaseApp = FirebaseApp.getInstance("Firebase"); 然后创建了一个新的引用 FirebaseDatabase.getInstance(firebaseApp).getReference(NEW_URL); - Paritosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接