Я сделал приложение для вставки, отображения и удаления контактов из моей учетной записи Google. Он функционировал до 2 недель назад, но после того, как Google прекратил поддержку входа в систему (доступ пользователя/пароля), заставляя использовать OAuth2 для доступа к токену, здесь огромная проблема (я не профессионал в разработка программного обеспечения).API контактов Google с доступом к учетной записи службы
С обширным поиском после обновления, я адаптировано моего код ниже логиков:
Const service_id = "My_Service_ID.apps.googleusercontent.com"
Const service_email = "[email protected]"
Const nome_aplicacao = "My_Application_Name"
Const user_id = service_email
1.Create Токен с учетными данными, полученных из ключа p12 и возвращает contactsRequest с этим маркером:
Private Function CriaContactRequest() As ContactsRequest
Try
Dim certificate As New X509Certificate2(Server.MapPath("/chave/key.p12"), "notasecret", X509KeyStorageFlags.Exportable)
Dim credential As New ServiceAccountCredential(New ServiceAccountCredential.Initializer(service_email) With { _
.Scopes = New String() {"https://www.google.com/m8/feeds https://www.google.com/m8/feeds/groups/default/full"}
}.FromCertificate(certificate))
credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait()
Dim rs = New RequestSettings(nome_aplicacao) With { _
.OAuth2Parameters = New OAuth2Parameters() With { _
.AccessToken = credential.Token.AccessToken, .RefreshToken = "6000" _
} _
}
Dim cr As New ContactsRequest(rs)
Return cr
Catch ex As Exception
Throw ex
End Try
End Function
2.To показать все контакты:
Public Sub ExibeContatos()
Try
Dim f As Feed(Of Contact) = CriaContactRequest().GetContacts()
If f.Entries.Count > 0 Then
' Loop to show contacts here....
Else
Response.Write("Não existem contatos.")
End If
Catch ex As HttpException
Response.Write("Erro Exibe Contatos: " & ex.Message)
End Try
End Sub
3.to вставных контактов:
Public Sub InsereContatoGoogle(oContato As Contact)
Try
Dim feedUri As New Uri(ContactsQuery.CreateContactsUri(user_id))
InserenNoGrupoPrincipal(oContato)
CriaContactRequest().Insert(feedUri, oContato)
Catch ex As Exception
Response.Write("Erro Insere Contato Google: " & ex.Message)
End Try
End Sub
4.Before вставки контакта, присвоить "My Contacs" (1-я группа на корма все группы):
Private Function InserenNoGrupoPrincipal(oContato As Contact) As Contact
Try
Dim f As Feed(Of Group) = CriaContactRequest().GetGroups(user_id)
Dim GrupoPrincipal As New GroupMembership
GrupoPrincipal.HRef = f.Entries.ElementAt(0).Id
oContato.GroupMembership.Add(GrupoPrincipal)
Catch ex As Exception
Response.Write("Erro Insere Grupo Principal: " & ex.Message)
End Try
Return oContato
End Function
5.Code удалить контакт на основе вектора заселенной с электронной почтой:
Public Sub ApagaContato(emailToExclude As String())
Dim query As ContactsQuery = New ContactsQuery(ContactsQuery.CreateContactsUri(user_id))
query.BaseAddress = emailToExclude(0)
Dim feed As Feed(Of Contact)
Try
Dim cr As ContactsRequest = CriaContactRequest()
feed = cr.GetContacts()
For Each c As Contact In feed.Entries
For x As Integer = 0 To c.Emails.Count - 1
For y As Integer = 0 To emailToExclude.Length - 1
If c.Emails.Item(x).Address = emailToExclude(y) Then
cr.Delete(c)
End If
Next
Next
Next
Catch ex As Exception
Response.Write("Erro Apaga Contato: " & ex.Message)
End Try
End Sub
Эти функции работают, но не как ожидалось: Я могу вставить новые записи, удалять и просматривать записи, как правило, но в моем Google счет «[email protected]
» ничего не происходит. После некоторого поиска в foruns, я подозреваю, что они находятся в служебной учетной записи «[email protected]
», так вот в чем проблема:
Кто-то может назначить то, что не так в области, учетных данных или другой части этого кода, и как я могу сделать учетную запись службы доступ сохранить изменения в моих "[email protected]" контакты?
Спасибо Я попробовал с учетной записью службы вместо клиентского доступа, потому что я не хотел запросить, и я подумал, что это лучший вариант, но это не так, как это работает. С обновлением токена, созданного на игровой площадке OAuth, все эти задачи функционируют и улучшаются: с меньшим количеством кода, чем этот начальный пост, и нет необходимости в p12 key –