riroshop
Goto Top

VB.NET Google Kalender in Anwendung für Kunden

Wir haben eine Software für unsere Kunden programmiert in welcher für bestimmte Personen Termine angelegt werden.
Diese Termine wurden auch automatisch im Google-Kalender des Kunden angelegt, damit die Mitarbeiter diese mit dem Handy synchronisieren konnten.

alter Code-Beispiel:

Dim query As EventQuery = New EventQuery
Dim service As CalendarService = New CalendarService("test")
service.setUserCredentials("Mein Account@domain.com", "MeinPasswort")
query.Uri = New Uri("http://www.google.com/calendar/feeds/default/private/full")

nun funktioniert dies nicht mehr und wir müssen auf 'OAuth 2.0' umstellen.
Wir haben es geschafft, eine 'client_secret.json' zu erstellen und unseren eigenen Kalender auszulesen.

Doch wie realisieren wir es, dass sich unsere Kunden mit seinem eigenen Google-Kalender anmelden kann, also mit seiner E-Mail und Passwort?

Dim secret As New ClientSecrets
secret.ClientId = "xxxxxx.apps.googleusercontent.com"
secret.ClientSecret = "xxxxxxxxx"

Dim init As New Flows.AuthorizationCodeFlow.Initializer("https://accounts.google.com/o/oauth2/auth", "https://accounts.google.com/o/oauth2/token")
init.ClientSecrets = secret

Dim flow As New Flows.AuthorizationCodeFlow(init)
Dim token As Responses.TokenResponse = flow.LoadTokenAsync("myMail@domain.de", CancellationToken.None).Result
Dim credential As New UserCredential(flow, "myMail@domain.de", token)

Try
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secret, {Google.Apis.Calendar.v3.CalendarService.Scope.Calendar}, "user", CancellationToken.None, ).Result
Catch ex As Exception
MsgBox(ex.Message)
End Try

Wenn wir diesen Code das erste mal ausführen, landen wir auf UNSERER Google-Seite, wir wollen aber Termine hochladen und keine Webseite anzeigen.

Kann jemand helfen?

Content-Key: 349508

Url: https://administrator.de/contentid/349508

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: MrCount
MrCount 20.09.2017 aktualisiert um 08:29:26 Uhr
Goto Top
Servus,

die Google Kalender-API ist eigentlich recht gut dokumentiert...

Vielleicht hilft dir das schon mal weiter, bis sich evtl. hier jemand damit auskennt... face-wink


P.S.: Deinen Code kannst du hier auch in entsprechende Tags setzen, damit der auch anständig angezeigt wird...

z.B.:
Dim secret As New ClientSecrets
secret.ClientId = "xxxxxx.apps.googleusercontent.com"  
secret.ClientSecret = "xxxxxxxxx"  

Dim init As New Flows.AuthorizationCodeFlow.Initializer("https://accounts.google.com/o/oauth2/auth", "https://accounts.google.com/o/oauth2/token")  
init.ClientSecrets = secret
Mitglied: 133883
Lösung 133883 20.09.2017 aktualisiert um 09:37:09 Uhr
Goto Top
Hi,
du musst den User beim ersten Verwenden der Anwendung auf eine spezielle Webseite im Browser leiten auf der der User sich mit seinen Google-Credentials einloggen muss und deiner Anwendung dort für den Zugriff eine Freigabe für die benötigten Rechte am Google Konto erteilen muss. Hat der User das getan wird ihm ein Code angezeigt. Mit diesem Code kannst du dann das Zugriffstoken für diesen Account bei Google abrufen und für den Zugriff verwenden und abspeichern.
Steht aber alles detailliert in den APIs wenn man sie denn mal lesen würde.

Gruß
Mitglied: Riroshop
Riroshop 20.09.2017 um 19:08:57 Uhr
Goto Top
Hallo Oneplus,

dann ist es ja richtig, dass der Benutzer auf eine Webseite kommt und den Zugriff bestätigen muss,
soweit waren wir schon.
Dim flow As New Flows.AuthorizationCodeFlow(init)
 Dim token As Responses.TokenResponse = flow.LoadTokenAsync("myMail@domain.de", CancellationToken.None).Result  
 Dim credential As New UserCredential(flow, "myMail@domain.de", token)  

 Try
 credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secret, {Google.Apis.Calendar.v3.CalendarService.Scope.Calendar}, "user", CancellationToken.None, ).Result  
Wenn ich die englische Anleitung richtig übersetze, dann müsste ich statt 'MyMail@domain.de' die Mail-Adresse des Kunden eingeben,
Richtig?
Wenn Ja, wie mache ich weiter?
wie komme ich an den Kalender des Kunden?
Mitglied: Riroshop
Riroshop 20.09.2017 um 19:53:52 Uhr
Goto Top
OK, wir haben es hin bekommen:
 Dim initializer As New BaseClientService.Initializer()
        initializer.HttpClientInitializer = credential
        initializer.ApplicationName = "Termin1"  
        service = New Google.Apis.Calendar.v3.CalendarService(initializer)

        Dim list As IList(Of CalendarListEntry) = service.CalendarList.List().Execute().Items()

Danke an alle, welche sich bemüht haben zu helfen.