Wie verwendet man ein Google Offline-Zugriffstoken, um sich im Hintergrund unter iOS zu authentifizieren?
Kurzfassung:
Ich möchte das benutzenGoogle OAuth2-Client für Objective C eine gültige erstellenGTMOAuth2Authentication
Objekt, das ich in meiner App verwenden soll, mit einem Offline-Zugriffstoken, das ich von meinem Backend erhalte. Wie kann ich das erreichen?
Meine Situation:
Meine App verwendet den schreibgeschützten Bereich "Analytics", um Daten über die Website (s) des Nutzers abzurufen. Die Art und Weise, wie ich dies bewerkstellige, ist das Einloggen mit demGTMOAuth2ViewControllerTouch
ViewController, bereitgestellt vom Google OAuth2-Client für Objective C. Er gibt mir dann die gültigenGTMOAuth2Authentication
Objekt, über das ich Google Analytics abfragen kannGoogle API-Client.
Jetzt möchten wir den Nutzern keinen Zugriff auf Google Analytics gewähren (einige haben keine Google-Konten und im Allgemeinen möchten wir die Informationen über die App einfach halten). Dies bedeutet, dass wir uns mit unserem Konto anmelden müssen (das Zugriff auf alle Analytics-Daten der Websites hat). Offensichtlich können wir unseren Benutzern unsere Zugangsdaten nicht geben, deshalb mussten wir eine Lösung dafür finden.
Mein Plan:
Ich denke, dieses Problem könnte gelöst werden, indem Sie unseren Token-String (für den Offline-Zugriff) von unserem Back-End anfordern (über SSL-Verschlüsselung), ihn im Schlüsselbund des Benutzers speichern und ihn in der Anwendung zum Abfragen von Analytics weiter verwenden. Anschließend lassen wir den Benutzer sich bei unserem Dienst anmelden (damit wir feststellen können, auf welche Websites der Benutzer Zugriff hat) und zeigen die Daten an.
Mein Problem:
Ich habe überall gesucht, die (sehr dünne) Dokumentation von Google durchgesehen, die inspiziertGTMOAuth2Authentication
Quellcode, aber ich kann nicht meinen Kopf um das Problem wickeln. Mir scheint, es gäbe eine Lösung wie diese (weil ich in unserem CMS einen ähnlichen Ansatz verwende, um einen Benutzer auf unserer Facebook-Pinnwand posten zu lassen). Was fehlt mir hier?
Der aktuelle Login-Code:
GTMOAuth2ViewControllerTouch *viewController = [[GTMOAuth2ViewControllerTouch alloc]
initWithScope:scope
clientID:kMyClientID
clientSecret:kMyClientSecret
keychainItemName:kKeychainItemName
completionHandler:
^(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error) {
if (error != nil) {
// Authentication failed
DebugLog(@"Failed!");
} else {
// Authentication succeeded
DebugLog(@"Success!");
// Update interface
self.loginButton.hidden = YES;
self.authentication = auth;
}
}];
Was ich ausprobiert habe:
Ich habe versucht, manuell eineGTMOAuth2Authentication
Das Objekt und das Festlegen aller Parameter selbst (Bereich, Client-ID, Sekret-ID, Zugriffstoken, Aktualisierungstoken, Callbackuri, Token-URL usw.), aber ich erhalte den Fehler 401: Anmeldung erforderlich, wenn ich versuche, das Objekt für Abfragen zu verwenden. Ich denke, das ist nicht der richtige Weg.
Links:
Google OAuth2-ClientGoogle API Objective-C-ClientDanke fürs Lesen!