![](/img/trans.png)
[英]How to get all event in a month use google calendar api in flutter?
[英]How to use Google API in flutter?
我想在我的 Flutter 应用程序中使用 Google Cloud Natural Language,我得到了Google API package这适用于 flutter 并且Google API_AUTH依赖适用于 0.2.1。 我如何实施它们?
这对我有用:
使用包google_sign_in
登录,然后从中获取身份验证标头:
import 'package:google_sign_in/google_sign_in.dart'
show GoogleSignIn, GoogleSignInAccount;
import 'package:googleapis/people/v1.dart'
show ListConnectionsResponse, PeopleApi;
useGoogleApi() async {
final _googleSignIn = new GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/contacts.readonly',
],
);
await _googleSignIn.signIn();
final authHeaders = _googleSignIn.currentUser.authHeaders;
// custom IOClient from below
final httpClient = GoogleHttpClient(authHeaders);
data = await PeopleApi(httpClient).people.connections.list(
'people/me',
personFields: 'names,addresses',
pageToken: nextPageToken,
pageSize: 100,
);
}
这是一个自定义IOClient
实现,可自动将 auth 标头添加到每个请求。 googleapis 调用支持传递要使用的自定义 HTTP 客户端而不是默认值(见上文)
import 'package:http/io_client.dart';
import 'package:http/http.dart';
class GoogleHttpClient extends IOClient {
Map<String, String> _headers;
GoogleHttpClient(this._headers) : super();
@override
Future<StreamedResponse> send(BaseRequest request) =>
super.send(request..headers.addAll(_headers));
@override
Future<Response> head(Object url, {Map<String, String> headers}) =>
super.head(url, headers: headers..addAll(_headers));
}
我还不能添加评论,所以我只是把它作为答案发布。
我一直试图按照最佳答案制作 GoogleHttpClient,但在导入时,它说“库 'package:http/http.dart' 不会导出显示名称为 'IOClient' 的成员。”
我在这里找到了答案https://pub.dartlang.org/packages/http#-changelog-tab- ,它说你应该像这样单独导入 IOClient: import 'package:http/io_client.dart';
我认为这可能会帮助其他不熟悉 Flutter 及其 Google API 实现的人。
接受的答案很可能是针对旧版本的 SDK 编写的,我只是无法使其正常工作。 这就是目前对我有用的方法。
例如,以下允许我们访问 Google Drive 中的文件,它是googleapis 的一部分。
pubspec.yaml:
dependencies:
google_sign_in: any
googleapis: any
(我只是把any
一个作为例子,但你应该为你的实际应用程序指定版本。)
必要的进口:
import 'package:googleapis/drive/v3.dart' as drive;
import 'package:google_sign_in/google_sign_in.dart' as signIn;
第 1 步,登录用户并请求访问 google drive 的权限(范围):
final googleSignIn = signIn.GoogleSignIn.standard(scopes: [drive.DriveApi.DriveScope]);
final sign.GoogleSignInAccount account = await googleSignIn.signIn();
第二步,构建一个AuthenticateClient
:
class AuthenticateClient extends http.BaseClient {
final Map<String, String> headers;
final http.Client client;
AuthenticateClient(this.headers, this.client);
Future<http.StreamedResponse> send(http.BaseRequest request) {
return client.send(request..headers.addAll(headers));
}
}
正如http 中所建议的,这是使用带有额外身份验证标头(可组合)的BaseClient
。
第 3 步,使用第 1 步和第 2 步创建一个经过身份验证的 http 客户端并访问 google drive API。
final baseClient = new Client();
final authenticateClient = AuthenticateClient(authHeader, baseClient);
final driveApi = drive.DriveApi(authenticateClient);
查看如何在 Flutter 应用程序中使用 Google Drive API了解详细信息。
更新已接受的答案
除了google_sign_in和googleapis包,现在您可以使用extension_google_sign_in_as_googleapis_auth包(由 flutter.dev 提供)来配置 http 客户端。 因此,可接受的答案可以简化为以下内容。 不需要实现 GoogleHttpClient。
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:googleapis/people/v1.dart';
useGoogleApi() async {
final _googleSignIn = new GoogleSignIn(
scopes: [
'email',
PeopleServiceApi.contactsReadonlyScope,
],
);
await _googleSignIn.signIn();
// custom IOClient
final httpClient = await _googleSignIn.authenticatedClient();
data = await PeopleApi(httpClient!).people.connections.list(
'people/me',
personFields: 'names,addresses',
pageToken: nextPageToken,
pageSize: 100,
);
}
在您可以使用 googleapis 包中列出的所有 api 之后,您需要获得 2 个包googleapis_auth和googleapis 。 我会在一个例子下告诉你
import 'package:googleapis/androidpublisher/v3.dart' as androidPublisher;
import 'package:googleapis_auth/auth_io.dart' as auth;
final _credentials = new auth.ServiceAccountCredentials.fromJson(r'''
{
"private_key_id": ...,
"private_key": ...,
"client_email": ...,
"client_id": ...,
"type": "service_account"
}
''');
const _SCOPES = const [
androidPublisher.AndroidpublisherApi.AndroidpublisherScope
];
auth.clientViaServiceAccount(_credentials, _SCOPES).then((httpClient) {
var publisher = new androidPublisher.AndroidpublisherApi(httpClient);
publisher.purchases.products
.get(
packageName,
productID,
purchaseToken)
.then((pub) {
debugPrint(pub.toJson().toString());
});
});
你可以创建这样的键
在 Cloud Console 中打开 IAM 和管理页面。
打开 IAM 和管理页面
单击选择项目,选择一个项目,然后单击打开。
在左侧导航中,单击服务帐户。
找到要为其创建密钥的服务帐号所在的行。 在该行中,单击 More more_vert 按钮,然后单击创建密钥。
选择密钥类型并单击创建。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.