MongoDB Stitch是一个功能强大的无服务器平台,可以满足您所有的后端需求。 除了提供对MongoDB Atlas集群中数据的细粒度访问控制之外,它还提供了基于JavaScript的计算环境,可用于执行各种服务器端操作。 在本教程中,我将向您展示如何在Android应用程序中使用该平台。
先决条件
要继续进行,您需要:
- MongoDB Atlas帐户
- 最新版本的Android Studio
- 运行Android 5.0或更高版本的设备或模拟器
1.创建一个MongoDB Atlas集群
MongoDB Stitch旨在与MongoDB Atlas集群一起使用。 您可以自由使用现有的群集,但是我建议您为本教程创建一个新的群集。
首先登录您的MongoDB Atlas帐户,然后按“ 构建新集群”按钮。
![MongoDB Atlas主页](https://i-blog.csdnimg.cn/blog_migrate/3f4b4176c9dc52020b0ee99af4c4fa74.png)
在要求您提供有关新群集的配置详细信息的下一个屏幕中,选择任何云提供商,提供M0免费层群集的区域,然后按“ 创建群集”按钮。
![集群创建向导](https://i-blog.csdnimg.cn/blog_migrate/ab9e1528c9108f2f1de7511e5c14a000.png)
几分钟后,您将拥有一个名为Cluster0的全新免费层集群。
2.创建一个MongoDB Stitch应用程序
要将Stitch应用程序与您的集群关联,请单击“ 链接应用程序”链接。 在接下来打开的页面中,按创建新应用程序按钮。
现在,您可以为新的Stitch应用程序输入所需的名称。 这样做之后,请确保选择了正确的群集,然后按“ 创建”按钮。
![新的针迹应用程序对话框](https://i-blog.csdnimg.cn/blog_migrate/59d364d2d50cb647c7e0a4b3e0d6c542.png)
至此,您的Stitch应用程序(具有非常大的免费配额)已准备就绪。
![针迹应用程序概述](https://i-blog.csdnimg.cn/blog_migrate/57f611f485ea725b1dd1fd77453a33c6.png)
该应用程序具有在开发Android应用程序时需要的唯一ID。 您可以通过转到“ 客户端”部分并打开“ Java(Android)”选项卡来查看其含义。
![针迹应用程序ID](https://i-blog.csdnimg.cn/blog_migrate/3f9a24b17f3f93ec4290f2dce6b48c45.png)
3.配置用户和规则
通过使用MongoDB Stitch,您可以安全地编写Web和移动前端代码以与您的MongoDB Atlas集群进行交互。 这是可能的,因为您不必在代码中包含包含数据库服务器地址,用户名和密码的连接字符串。
Stitch应用程序的经过身份验证的最终用户将自动获得对数据库的访问权限。 但是,使用一个或多个规则,您可以精确控制他们可以查看或修改的文档和字段 。
为了对用户进行身份验证,Stitch提供了多种身份验证机制,包括匿名身份验证,电子邮件/密码身份验证以及使用流行的联合身份提供者的身份验证。 在本教程中,我们将使用匿名身份验证。 要进行设置,请转到“ 用户”部分,然后打开“ 提供程序”选项卡。
![身份验证提供者列表](https://i-blog.csdnimg.cn/blog_migrate/a5436b1a6f201f148b43e61d699d5903.png)
接下来,选择“ 允许用户匿名登录”选项,启用它,然后按“ 保存”按钮。
假设我们要允许匿名用户仅使用他们拥有的文档。 要创建这样的规则,请转到“ 规则”部分。
由于规则已应用于集合,因此请按添加集合按钮立即创建一个新集合。 在显示的表单中,为其命名并指定其必须属于的数据库。 这样做之后,选择“ 用户只能读写自己的数据规则”模板。
![添加新收藏页](https://i-blog.csdnimg.cn/blog_migrate/7f1dee387506afef964aa94499fad12d.png)
选择模板后,系统将提示您指定文档中要存储用户自动生成的Stitch身份验证ID的字段名称。 Stitch将在决定文档是否属于用户时使用此字段。 假设名称为user_id,然后提交表单。
现在,在接下来打开的页面中,您可以确认只有集合中文档的所有者才能对它们执行读写操作。
![集合权限页面](https://i-blog.csdnimg.cn/blog_migrate/e5f8b8c35eee3024b7ee3c16e1177882.png)
4.准备Android项目
为了能够在Android Studio项目中使用Stitch,必须在app
模块的build.gradle文件中添加其官方SDK作为implementation
依赖项 。
implementation 'org.mongodb:stitch-android-sdk:4.0.5'
此外,您必须在项目中提及Stitch应用程序的唯一ID。 因此,转到res / values / strings.xml文件并将其添加为<string>
标记。
<string name="my_app_id">mystitchapp-qwern</string>
5.建立连接
使用StitchAppClient
类的实例,您可以轻松利用Stitch平台提供的所有功能。 要初始化初始化StitchAppClient
,您必须调用initializeDefaultAppClient()
方法并将Stitch应用程序的ID传递给它。 此操作仅需在您的应用中执行一次,最好在应用启动后立即完成。
准备就绪后,可以调用getDefaultAppClient()
方法来获取对客户端的引用。 可以将以下代码添加到活动的onCreate()
方法中,向您展示如何:
Stitch.initializeDefaultAppClient(
resources.getString(R.string.my_app_id)
)
val stitchAppClient = Stitch.getDefaultAppClient()
除非您的用户登录到Stitch应用程序,否则您将无法在MongoDB Atlas集群上执行任何有用的操作。 因此,您现在必须通过调用loginWithCredential()
方法登录用户,该方法异步运行并返回Task
对象。 此外,由于您在Stitch的Web控制台中选择了匿名身份验证作为身份验证机制,因此请确保将AnonymousCredential
类的实例传递给该方法。
stitchAppClient.auth.loginWithCredential(AnonymousCredential())
.addOnSuccessListener {
// More code here
}
此时,如果您运行该应用程序,Stitch将自动将您注册为新用户,并同时将您登录到该应用程序中。 此外,如果返回到Stitch Web控制台并打开“ 用户”部分,您将可以看到新条目已添加到用户列表中。
![认证用户列表](https://i-blog.csdnimg.cn/blog_migrate/049ab591402bd1cebdef669c568356e3.png)
6.插入文件
成功通过身份验证后,您可以继续获取RemoteMongoClient
类的实例,以开始与MongoDB Atlas集群进行交互。 为此,您可以调用getServiceClient()
方法并指定所需的服务名称为“ mongodb-atlas
”。 这是如何做:
val mongoClient = stitchAppClient.getServiceClient(
RemoteMongoClient.factory,
"mongodb-atlas"
)
请记住,由于您在本教程的前面创建了规则,因此用户只能对其自己的数据执行读写操作。 此外,您的用户仅限于使用您在Stitch Web控制台中提到的数据库和集合。
要获取对数据库的引用,请调用getDatabase()
方法并将其名称传递给它。 同样,要获取对集合的引用,请调用getCollection()
方法,该方法将返回RemoteMongoCollection
对象。
val myCollection = mongoClient.getDatabase("test")
.getCollection("my_collection")
当然,添加到集合中的内容取决于您。 举个例子,假设我们要添加包含用户打开应用程序所有时间的时间戳的文档。
要创建新的BSON文档 ,必须使用Document
类的构造函数。 由于Document
对象与地图非常相似,因此可以使用[]
运算符向其添加键值对。
以下代码显示了如何创建一个新文档并为其添加时间戳:
val myFirstDocument = Document()
myFirstDocument["time"] = Date().time
除了您的数据外,所有文档还必须包含用户的针迹身份验证ID。 没有它,您的插入操作将失败。 要获取身份验证ID,您可以直接使用成功侦听器中可用的隐式it
对象的id
属性。
myFirstDocument["user_id"] = it.id
现在,您可以通过调用insertOne()
方法来插入文档。 (您可以在Java驱动程序的MongoDB文档中了解insertOne()
方法和其他写入操作 。)由于它是异步运行的,因此您需要另一个成功侦听器来检查插入操作是否成功。
myCollection.insertOne(myFirstDocument)
.addOnSuccessListener {
Log.d("STITCH", "One document inserted")
}
如果您现在运行该应用程序并检查Android Studio的Logcat面板,则应该能够看到如下所示的日志条目:
![Logcat面板显示成功消息](https://i-blog.csdnimg.cn/blog_migrate/48254cb04beed7a020ee3854f6818b5b.png)
7.运行查询
通过调用RemoteMongoCollection
对象的find()
方法,可以创建查询。 (您可以在MongoDB Java驱动程序文档中了解有关find()
和其他查询操作的更多信息。)该方法返回一个RemoteFindIterable
对象,您可以在该对象上调用诸如sort()
和limit()
sort()
更多方法来管理查询。 例如,以下代码创建查询以查找用户创建的最后五个文档:
val query = myCollection.find()
.sort( Document("time", -1) )
.limit(5)
要实际运行查询,可以调用其into()
方法,该方法需要一个列表作为参数。 顾名思义,它会将查询结果(仅Document
对象)加载到传递给它的列表中。 它异步运行,因此您只能在成功的侦听器内部开始使用列表。
val result = mutableListOf<Document>()
query.into(result).addOnSuccessListener {
// More code here
}
现在,为简单TextView
,让我们使用TextView
小部件显示查询结果。 因此,将以下代码添加到活动的布局XML文件中:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/viewer"
/>
回到成功侦听器内部,您现在可以遍历列表并创建包含所有时间戳记的串联字符串。 (可选)您可以将时间戳传递给DateUtils
类的getRelativeDateTimeString()
方法,以使其更具可读性。 字符串准备好后,您可以直接将其分配给TextView
小部件。 这是如何做:
val output = StringBuilder("You opened this app: \n\n")
// Loop through the results
result.forEach {
output.append(
DateUtils.getRelativeDateTimeString(
this@MainActivity,
it["time"] as Long, // Get value of 'time' field
DateUtils.SECOND_IN_MILLIS,
DateUtils.WEEK_IN_MILLIS,
0
)
).append("\n")
}
// Update the TextView
viewer.text = output
如果再次运行该应用程序,您现在应该在设备上看到以下内容:
![应用显示时间戳列表](https://i-blog.csdnimg.cn/blog_migrate/60e04c3a4c541360eae9eb30033def79.png)
结论
MongoDB Stitch是一个无服务器平台,可用于创建可轻松扩展以处理大量用户数据的现代应用程序。 在本教程中,您学习了如何使用它来匿名认证Android应用程序的用户,并允许他们安全地对MongoDB Atlas集群执行读写操作。
要了解有关MongoDB Stitch的更多信息,请参阅官方文档 。
翻译自: https://code.tutsplus.com/tutorials/how-to-use-mongodb-stitch-in-android-apps--cms-31877