Мое приложение использует Google API Calendar V3 с OAuth, и это отлично работает. Сначала он попросит пользователя о своем согласии. Для создания, изменения и удаления событий календаря легко использовать службу календаря. Пока все хорошо!Как создать ContactService с помощью API контактов Google v3 с OAuth v2 UserCredentials
Теперь я хочу задать пользователю разрешение на добавление и изменение контактных данных. Добавив следующую строку «https://www.google.com/m8/feeds/», пользователю также предлагается разрешение на доступ к контакту. Это похоже на работу. Однако я не могу найти способ создания ContactService на основе UserCredential, полученного в результате вышеуказанного процесса. Как использовать UserCredential с ContactService?
Я прочитал все вопросы с помощью тегов: Google-контакт и Google-api-dotnet-клиент. Я проверил документацию по API V3, и я нашел создание сервиса для Календаря, Диска и множество других API, но не для контакта? Что я пропущу?
Это фрагмент кода, который я использую, чтобы запросить разрешение и запустить службу календаря.
using Google.Contacts;
using Google.GData.Contacts;
using Google.GData.Client;
using Google.GData.Extensions;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Calendar;
using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;
using System.Threading;
using Google.Apis.Services;
namespace MY
{
class GoogleContact
{
static public void start_service()
{
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "clientID",
ClientSecret = "clientsecret",
},
new[] { CalendarService.Scope.Calendar, "https://www.google.com/m8/feeds/" }, // This will ask the client for concent on calendar and contatcs
"user",
CancellationToken.None).Result;
// Create the calendar service.
CalendarService cal_service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Calendar API Sample",
});
// How do I use the found credential to create a ContactsService????
ContactsService service = new ContactsService("APP_NAME");
}
Я ценю любые отзывы о следующих шагах, которые я должен предпринять?
UPDATE, после получения обратной связи:
Я добавил следующий фрагмент кода для того, чтобы использовать контактные данные.
// Get the tokens from the FileDataStore
var token = new FileDataStore("Google.Apis.Auth")
.GetAsync<TokenResponse>("user");
OAuth2Parameters parameters = new OAuth2Parameters
{
ClientId = mSecrets.ClientId,
ClientSecret = mSecrets.ClientSecret,
// Note: AccessToken is valid only for 60 minutes
AccessToken = token.Result.AccessToken,
RefreshToken = token.Result.RefreshToken
};
RequestSettings settings = new RequestSettings(
"Contact API Sample", parameters);
ContactsRequest cr = new ContactsRequest(settings);
Feed<Contact> f = cr.GetContacts();
// The AccessCode is automatically updated after expiration!
foreach (Contact c in f.Entries)
{
Console.WriteLine(c.Name.FullName);
}
Сначала я прочитал токен доступа и токен обновления из FileDataStore.
Затем я настроил параметры OAuth2Parameters, используя токен, который я только что прочитал.
И теперь я могу построить новый ContactService и ContactsRequest.
К моему удивлению, токен доступа автоматически возобновляется после истечения срока действия также для ContactService.
Спасибо за четкий ответ! Означает ли это, что я должен дважды спросить пользователя? Сначала для данных календаря, с вышеуказанным фрагментом кода, а затем другим способом (?) Для контактных данных? Полагаю, странный пользовательский опыт. Возможно ли преобразовать информацию в UserCredential в OAuth2Parameters, которую я должен использовать для данных Contact? – Jelle
обновил мой ответ. Я также добавлю тег gdata к вопросу :) – peleyal
Я уже добавил область для контактов в метод AuthorizeAsync, который, по крайней мере, кажется, работает. Теперь я попытаюсь выяснить, могу ли я использовать информацию FileDataStore для использования с API-интерфейсом Gdata. Спасибо за ответы, я отвечу на исходный вопрос. – Jelle