连接到 App Services - Flutter SDK
App
客户端是 Atlas App Services 后端的接口。 它提供对用户身份验证和 Device Sync 等 App Services 功能的访问。
开始之前
访问应用程序客户端
在版本 1.7.0 中进行了更改: 必须在主隔离上创建App
。
创建一个实例,以便在整个应用程序中访问App
App Services 功能。我们建议您在主隔离上仅创建一次App
实例,最好是在应用程序启动后立即创建。
从App Services用户界面获取App Services App 的ID 。 要学习;了解如何操作,请参阅查找应用程序ID。
创建 AppConfiguration 对象,并将应用的 App ID作为参数。
创建 应用程序
AppConfiguration
与刚刚创建的 一起使用。在 Flutter v 1中。 7 。 0 以后,必须在主隔离上完成此操作,否则 SDK 会引发错误。
创建App
后,您可以使用App.getById
在背景隔离上访问权限构造的App
实例。 有关更多信息,请参阅本页上的“按ID获取应用程序”部分。
final appConfig = AppConfiguration(appId); final app = App(appConfig);
您可以创建多个应用客户端实例以连接多个应用。 股票相同 App ID的所有 App客户端实例使用相同的根本的连接。
重要
初始化应用后更改应用配置
在版本1.8.0中进行了更改: baseUrl
未缓存在AppConfiguration
初始化 App客户端时,会在内部缓存配置。 尝试在同一进程中关闭并重新打开配置已更改的应用无效。 客户端继续使用缓存的配置。
在Flutter SDK版本1.8.0 及更高版本中, baseUrl 不再 缓存在应用配置中。这意味着您可以更改baseUrl
,应用客户端将使用更新后的配置。 在早期 SDK 版本中,对缓存的应用配置中的baseUrl
进行更改无效。
高级配置
自 1.6.0 版起已弃用: 不再使用App.localAppName
和App.localAppVersion
。
您可以向AppConfiguration
添加可选参数,以便更精细地控制App
客户端。 您可能需要添加自定义连接超时或本地元数据加密密钥等功能。 要学习;了解可用的配置选项,请参阅 AppConfiguration 参考文档。
final appConfig = AppConfiguration(appId, defaultRequestTimeout: const Duration(seconds: 120) // ... see reference docs for all available configuration options );
注意
使用 Android 7 或更早版本进行连接
Realm Flutter SDK 附带的默认 HTTP 客户端不适用于在 Android 7 或更早版本上运行的应用。 要解决此问题,您必须将自定义 HTTP 客户端添加到AppConfiguration
中。 要了解更多信息,请参阅使用 Android 7 或更早版本连接到 App Services。
通过 ID 获取应用
1.7.0 版本的新增功能。
App
在主隔离上创建 实例后,您可以通过将 App ID 传递给 App.getById() 来访问后台隔离上构造的实例。 方法。然后,您可以根据需要使用它与App
和用户合作。
// Create an App instance once on main isolate, // ideally as soon as the app starts final appConfig = AppConfiguration(appId); final app = App(appConfig); final receivePort = ReceivePort(); // Later, access the App instance on background isolate await Isolate.spawn((List<Object> args) async { final sendPort = args[0] as SendPort; final appId = args[1] as String; try { final backgroundApp = App.getById(appId); // ... Access App users final user = backgroundApp?.currentUser!; // Use the App and user as needed. sendPort.send('Background task completed'); } catch (e) { sendPort.send('Error: $e'); } }, [receivePort.sendPort, appId]);
连接到特定MongoDB Server
默认情况下,Atlas Device SDK 使用https://services.cloud.mongodb.com
的全局baseUrl
连接到 Atlas。 在某些情况下,您可能想要连接到不同的服务器:
您的App Services App使用本地部署,并且您希望直接连接到您所在地区的本地
baseUrl
。
有关详细信息,请参阅本地部署App Services文档。
您可以在baseUrl
AppConfiguration 中指定 :
// Specify a baseUrl to connect to a server other than the default final appConfig = AppConfiguration(appId, baseUrl: Uri.parse('https://example.com')); var app = App(appConfig);
在运行时连接到不同的MongoDB Server
版本 1.8.0 中的新增内容。
在版本2.2.0中进行了更改: updateBaseUrl
接受null
值
在某些情况下,您可能希望在应用运行时更改baseUrl
。
要在运行时更改baseUrl
,请调用实验性 应用.updateBaseUrl 方法。您可以传递null
将baseUrl
重置为默认值。
// Specify a custom baseUrl to connect to. // In this case, a custom server instance running on the device. final appConfig = AppConfiguration(customServerAppId, baseUrl: Uri.parse('http://localhost:80')); var app = App(appConfig); // ... log in a user and use the app ... // Later, change the baseUrl to the default: // https://services.cloud.mongodb.com await app.updateBaseUrl(null);
此 API 是实验性的,可能在未来版本中更改。
如果要在用户登录并打开同步数据库后更改baseUrl
,则应用必须执行客户端重置。 有关详细信息,请参阅客户端重置。
在代码中执行以下操作:
使用
app.updateBaseUrl
方法更新baseUrl
对用户重新进行身份验证,登录使用新的
baseUrl
打开同步数据库,从新服务器提取数据
服务器和客户端都必须在线,用户才能进行身份验证并连接到新服务器。 如果服务器不在线或客户端没有网络连接,则用户无法进行身份验证并打开数据库。