我是不熟悉Flutter的人,正在尝试弄清楚是否有一种方法可以将文件写入iCloud(iOS)或Google Drive(Android)。在Swift / Android本机开发人员中似乎有API可以做到这一点,但是我一无所获。
我本质上希望我的应用程序在iCloud中的文本文件上编写,以便同一用户在不同手机上的同一应用程序的另一次安装可以访问该文件。我试图在没有我自己的云设置的情况下执行此操作(因为它非常简单且很小,所以没有firebase等),所以我认为iCloud / gDrive会是完美的。
我的 Google Drive 上有一个公共(知道链接的任何人都可以查看)文件,我想在我的 Android 应用程序中使用它的内容。
从我目前收集到的信息来看,我需要 fileID、OAuth 令牌和客户端 ID - 这些我已经得到了。但我无法弄清楚授权应用程序或获取文件的确切方法是什么。
编辑:
简单地使用 file.readAsLines 读取它是行不通的:
final file = new File(dogListTxt);
Future<List<String>> dogLinks = file.readAsLines();
return dogLinks;
Run Code Online (Sandbox Code Playgroud)
dogLinks 变量未填充任何数据,但我未收到任何错误消息。
我尝试的另一种方法是遵循这个示例,但这是一个基于 Web 的应用程序,具有显式授权请求(由于某种原因,我永远无法导入 dart:html 库)。
最好的解决方案是如果它可以无缝完成,因为我会在应用程序启动时将内容存储在列表中,并在手动刷新按钮按下时重新阅读。
我在这里找到了几个旧的解决方案,但是这些方法中描述的方法似乎不再适用(从 4-5 年前开始)。
是否有关于在用 dart 编写的 Flutter 应用程序中集成 Drive API 的良好分步教程?
我一直在寻找如何使用颤振应用程序实现 firebase 功能。似乎没有可用的 SDK(还)。我也尝试将 gradle 依赖项添加implementation 'com.google.firebase:firebase-functions:15.0.0'到我的,app/build.gradle但这会导致构建错误。
有没有人做过有效的实现?我找不到有关如何处理凭据和数据传输以构建我自己的 Firebase 函数调用的任何文档。
我已经创建了一个粗略的轮廓,说明我认为这是如何工作的,但可能有偏差。
Future<dynamic> updateProfile(String uid, AccountMasterViewModel avm) async {
Uri uri = Uri.parse(finalizeProfileFunctionURL);
var httpClient = new HttpClient();
String _result = '';
try {
return await httpClient
.postUrl(uri)
.then((HttpClientRequest request) {
return request.close();
// authentication??
// Fields and data??
})
.then((HttpClientResponse response) async {
print(response.transform(new Utf8Codec().decoder).join());
if (response.statusCode == HttpStatus.OK) {
String json = await response.transform(new Utf8Codec().decoder).join();
_result = jsonDecode(json);
// Do some work
return json;
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过重新构建以前用Java编写的应用程序来学习如何使用飞镖和颤动,这涉及到使用Google自己的Calendar API从Google Calendar获取事件。
通过阅读(不是很详细的)有关googleapis_auth包的文档,以及StackOverflow上唯一的一个非常类似的问题的线程,我已经设法将理论上可行的代码组合在一起:
import 'package:googleapis/calendar/v3.dart';
import 'package:googleapis_auth/auth_io.dart';
//get Service Account Credentials
final accountCredentials = new ServiceAccountCredentials.fromJson({
"private_key_id": "myprivatekeyid",
"private_key": "myprivatekey",
"client_email": "myclientemail",
"client_id": "myclientid",
"type": "service_account"
});
var _scopes = [CalendarApi.CalendarScope]; //defines the scopes for the calendar api
void getCalendarEvents() {
clientViaServiceAccount(accountCredentials, _scopes).then((client) {
var calendar = new CalendarApi(client);
var calEvents = calendar.events.list("primary");
calEvents.then((Events events) {
events.items.forEach((Event event) {print(event.summary);});
});
});
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在模拟器上运行时不会产生任何错误,也不会在控制台中打印任何事件摘要。但是,当在项目的仪表板上查看时,请求将以成功响应200响应。我还尝试过使用嵌套在clientViaServiceAccount中的类似代码来获取我所有日历的ID,并且它也不会返回任何内容。
另外,从文档中,我发现访问API的最简单方法是通过客户端服务帐户(如代码所示),而不是通过OAuth2客户端ID(我更习惯了)。
我想念什么吗?代码是否错误?也许我需要弄乱服务帐户上的设置?任何帮助,将不胜感激。
经过大量研究和修复问题,我到达了我的github中的以下位置。但我不知道我是否正确安装了 json。对于出现以下错误:
{
error:
{
errors: [
{
domain: global,
reason: parseError,
message: This API does not support parsing form-encoded input.
}
],
code: 400,
message: This API does not support parsing form-encoded input.
}
}
Run Code Online (Sandbox Code Playgroud)
我正在设置帖子如下,更多细节项目在我的github中
// scope for send email
GoogleSignIn googleSignIn = new GoogleSignIn(
scopes: <String>[
'https://www.googleapis.com/auth/gmail.send'
],
);
await googleSignIn.signIn().then((data) {
testingEmail(data.email, data.authHeaders);
});
// userId is the email
Future<Null> testingEmail(userId, header) async {
String url = 'https://www.googleapis.com/gmail/v1/users/' + userId + '/messages/send';
final …Run Code Online (Sandbox Code Playgroud) 使用时
使用此代码通过 Flutter 访问 Google Api
import 'dart:convert';
import 'dart:io';
import 'package:googleapis_auth/auth.dart';
import 'package:googleapis_auth/auth_browser.dart';
import 'package:googleapis_auth/auth_io.dart';
import 'package:googleapis/androidpublisher/v3.dart';
Future main() async {
dynamic jsonData = json.decode(
await File('api-xxxxxxxxxxxxxxxxxxxx.json')
.readAsString());
var scopes = [AndroidpublisherApi.AndroidpublisherScope];
final accountCredentials = new ServiceAccountCredentials.fromJson(jsonData);
AuthClient client = await clientViaServiceAccount(accountCredentials, scopes);
}
Run Code Online (Sandbox Code Playgroud)
你会得到这个错误
错误:未找到:'dart:html' 将 'dart:html' 导入为 html;
我有一个很长一段时间没有接触过的非常古老的 Android 项目。它将一些用户数据存储在用户 Google Drive appdata 文件夹中。现在我正在将应用程序更新为 Flutter 版本,并且由于 Google Drive API 已被弃用,因此 Flutter 没有插件,我相信我现在需要为此使用 googleapi。但是我找不到太多关于我的颤振问题的信息。我到了使用 google_sign_in 登录的地步:^4.0.7
GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/drive.appdata',
'https://www.googleapis.com/auth/drive.file',
],
);
try {
GoogleSignInAccount account = await _googleSignIn.signIn();
} catch (error) {
print(error);
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我被困在那里。如何从那里读取用户 Google Drive 上 appdata 文件夹中的文件?
EDIT1:这个答案有帮助,我设法获得了 httpClient,但我仍然坚持如何获得 appdata 文件夹及其文件如何在 Flutter中使用 Google API?
googleapi 似乎不支持 appfolder,因为 Google 可能会在未来弃用它(似乎他们已经这样做了),以迫使我们使用 firebase 支付存储费用。好的,很好,但是如果我无法通过 googleapi 访问该文件夹,我该如何迁移它?如果我现在重置我的应用程序并且我的用户丢失了他们的所有数据,我将丢失我拥有的少数用户......
我正在开发Flutter应用程序,我想在其中集成我的Google驱动器,以便可以通过应用程序访问驱动器的内容。
我是Flutter的初学者,没有任何应用程序开发知识。请帮助我提供一些代码,我可以使用这些代码来执行上述操作。