gpt4 book ai didi

android - Android 访问 token 上的 Google 日历 API

转载 作者:行者123 更新时间:2023-11-29 23:13:48 25 4
gpt4 key购买 nike

我想查询事件并将其添加到已登录该应用(使用他/她/它的 Google 帐户)的用户的主日历。

我已经走了这么远:

class CalendarClient {
private static final String APPLICATION_NAME = "TrackTransfer";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

private final String token;

CalendarClient (String token){
this.token = token;
}

private Credential getCredentials() {
return new GoogleCredential().setAccessToken(token);
}

void print() throws IOException {
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport();
Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials())
.setApplicationName(APPLICATION_NAME)
.build();

// List the next 10 events from the primary calendar.
DateTime now = new DateTime(System.currentTimeMillis());
Events events = service.events().list("primary")
.setMaxResults(10)
.setTimeMin(now)
.setOrderBy("startTime")
.setSingleEvents(true)
.execute();
List<Event> items = events.getItems();
if (items.isEmpty()) {
System.out.println("No upcoming events found.");
} else {
System.out.println("Upcoming events");
for (Event event : items) {
DateTime start = event.getStart().getDateTime();
if (start == null) {
start = event.getStart().getDate();
}
System.out.printf("%s (%s)\n", event.getSummary(), start);
}
}
}

}

我在用户已登录且登录帐户由 account 表示的 Activity 中这样调用它。

private void writeToCalendar()  {
new Thread(new Runnable() {
@Override
public void run() {
try {
Log.d("CAL", "token: " + account.getIdToken());
CalendarClient c = new CalendarClient(account.getIdToken());
c.print();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();

}

但是,即使用户已登录,account.getIdToken() 也是 Null。我还尝试将 token 设置为我在 Google 开发人员控制台中为我的应用程序获取的客户端 ID,这也不起作用。

自然地,当 token 为 Null 时,我会收到一个异常,说明超出了未签名的 api 调用的条件。

在调用 writeToCalendar() 之前访问 Fitness API 不是该帐户的问题(因此已登录)。

我查看了各种资源,但都没有帮助。 Google API 文档是关于 Java 的,并使用了从开发者控制台获得的凭证;然而,因为我想使用 OAuth 进行身份验证,所以这不是正确的做法(我猜?)。然后我发现可以使用 GoogleCredential().setAccessToken(token) 但我不知道使用的是什么 token 。

如何获取正确的 token ?

更新

当请求登录帐户的范围时,可以直接使用健身 api:

FitnessOptions fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.TYPE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
.build();
GoogleSignInAccount gsa = GoogleSignIn.getAccountForExtension(this, fitnessOptions);

回调看起来像这样:

account = completedTask.getResult(ApiException.class);

但是,当请求日历 api 的范围时,以下是否正确?

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope("https://www.googleapis.com/auth/calendar"))
.build();
GoogleSignInClient tempClient = GoogleSignIn.getClient(this, gso);

最佳答案

登录

sign in

我也发现了这一点,在 api 为您提供访问 token 之前,您可能需要使用 oauth:

auth

然后我会检查它是否是您需要为其启用计费帐户的 API 之一。有可能。这并不意味着您需要付费...取决于 api google 让您“启用”计费。不确定此 api 是否是其中之一。

info

关于android - Android 访问 token 上的 Google 日历 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55657777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com