vr-struper
Bam-bam-bam
- Mensagens
- 3.271
- Reações
- 9.012
- Pontos
- 303
Recentemente o Google acabou com o suporte ao acesso usuário/senha do Google API, deixando tudo pelo OAuth2 e isso tem sido um grande problema por aqui. Bom, na verdade não é um grande problema... mas perdi umas funcionalidades bacanas de ter a inserção/exclusão de contatos da conta integrado ao meu sistema.
Basicamente, antes eu tinha isso aqui 100% funcional:
Mas desde o fim de junho esses GDataCredentials(Conta, Senha) passou a não ser mais aceito, com o servidor retornando erro 404, forçando todos a usarem o acesso com token do OAuth2.
Estou usando uma Service Account, já que é uma aplicação de servidor, e cheguei no seguinte código funcional para o Google Drive, só que ela nãoo se encaixa nas rotinas suportadas pela classe Contacts:
O código acima acessa todas as planilhas da conta e o laço no final exibe seus nomes, funciona perfeitamente. Com base nisso e alguns outros milhares de posts na internet, cheguei nisso:
Aí que está o problema: diferente de todas as outras tentativas, esse código não retorna erro 4XX algum (não autorizado), mas também não faz o que se propõe, que é inserir o contato na conta.
Alguém por aqui entende do assunto?
Basicamente, antes eu tinha isso aqui 100% funcional:
Código:
Private Sub InsereContato()
Try
Dim NovoContato As New Contact()
NovoContato.Name.FullName = Nome
InsereEmail(NovoContato)
InsereFone(NovoContato)
InsereGrupoPrincipal(NovoContato)
Dim feedUri As New Uri(ContactsQuery.CreateContactsUri("default"))
Dim Credenciais As New GDataCredentials(Conta, Senha)
Dim Settings As New RequestSettings(NomeAplicacao, Credenciais)
Dim cr As New ContactsRequest(Settings)
cr.Insert(feedUri, NovoContato)
Catch ex As Exception
GravaLogErro(ex.Message, "Google", "Inserir", "erros")
End Try
End Sub
Estou usando uma Service Account, já que é uma aplicação de servidor, e cheguei no seguinte código funcional para o Google Drive, só que ela nãoo se encaixa nas rotinas suportadas pela classe Contacts:
Código:
Private Sub ConectaPlanilhaFuncional(scope As String)
Dim certificate As New X509Certificate2(Server.MapPath("/certificate/key.p12"), "notasecret", X509KeyStorageFlags.Exportable)
Dim credential = New ServiceAccountCredential(New ServiceAccountCredential.Initializer(service_email) With { _
.Scopes = New String() {scope}
}.FromCertificate(certificate))
Try
credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait()
Catch ex As Exception
End Try
Dim requestFactory As New GDataRequestFactory(nome_aplicacao)
requestFactory.CustomHeaders.Add(String.Format("Authorization: Bearer {0}", credential.Token.AccessToken))
Dim myService As New SpreadsheetsService(nome_aplicacao)
myService.RequestFactory = requestFactory
Dim query As New SpreadsheetQuery()
Dim feed As SpreadsheetFeed = myService.Query(query)
For Each f As SpreadsheetEntry In feed.Entries
Dim texto As String = f.Title.Text
Next
End Sub
Código:
Public Sub InsereContatoGoogle()
Try
Dim feedUri As New Uri(ContactsQuery.CreateContactsUri("default"))
Dim NovoContato As New Contact
NovoContato.Name.FullName = Nome
InsereEmail(NovoContato)
InsereFone(NovoContato)
'InserenNoGrupoPrincipal(NovoContato)
Dim certificate As New X509Certificate2(Server.MapPath("/certificate/key.p12"), "notasecret", X509KeyStorageFlags.Exportable)
Dim credential = New ServiceAccountCredential(New ServiceAccountCredential.Initializer(service_email) With { _
.Scopes = New String() {feedUri.AbsoluteUri}
}.FromCertificate(certificate))
Try
credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait()
Catch ex As Exception
End Try
Dim rs As New RequestSettings(nome_aplicacao, credential.Token.AccessToken) With { _
.AutoPaging = True, _
.UseSSL = True _
}
Dim cr As New ContactsRequest(rs)
cr.Insert(feedUri, NovoContato)
Catch ex As Exception
'GravaLogErro(ex.Message, "Google", "Inserir", "erros")
End Try
End Sub
Alguém por aqui entende do assunto?
Ultima Edição: