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-Client

Danke fürs Lesen!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage