App Flip für iOS

Die OAuth-basierte App-Flip-Verknüpfung (App Flip) öffnet Ihre iOS-App über eine Google-App, damit der Google-App-Benutzer sein Konto einfacher verknüpfen kann. Sie müssen kleinere Codeänderungen an Ihrer iOS-App vornehmen, um diese Funktion zu implementieren.

In diesem Dokument erfahren Sie, wie Sie Ihre iOS-App so ändern, dass sie App Flip unterstützt.

Probieren Sie die Probe aus

Die App Flip Beispielanwendung zeigt ein Konto verknüpfen Integration auf iOS , die App - Flip-kompatibel. Mit dieser App können Sie überprüfen, wie Sie auf einen eingehenden universellen App Flip-Link von mobilen Google-Apps reagieren.

Die Beispielanwendung ist so vorkonfiguriert , mit der Integration App Flip - Test - Tool für iOS , mit denen Sie Ihrem iOS - App-Integration in App Flip verwenden können , um zu überprüfen , bevor Sie configure mit Google - Konto verknüpfen. Diese App simuliert den universellen Link, der von mobilen Google-Apps ausgelöst wird, wenn App Flip aktiviert ist.

Wie es funktioniert

Im Folgenden sind die Ablaufschritte aufgeführt, die die Google App und Ihre App ausführen, wenn App Flip auftritt:

  1. Die Google App versucht, den universellen Link Ihrer App zu öffnen. Es kann Ihre App öffnen, wenn sie auf dem Gerät des Benutzers installiert und mit dem universellen Link verknüpft ist. Siehe Unterstützung Universal - Verbindungen für weitere Einzelheiten.

  2. Ihre Anwendung überprüft, ob die client_id und redirect_uri Parameter codiert in der eingehenden URL entspricht die erwartete Google Universal-Link.

  3. Ihre App fordert einen Autorisierungscode von Ihrem OAuth2-Server an. Am Ende dieses Ablaufs gibt Ihre App entweder einen Autorisierungscode oder einen Fehler an die Google-App zurück. Dazu öffnet es den universellen Link von Google mit angehängten Parametern für den Autorisierungscode oder Fehler.

  4. Die Google-App verarbeitet den eingehenden universellen Google-Link und fährt mit dem Rest des Flusses fort. Bei Angabe eines Autorisierungscodes wird die Verknüpfung sofort abgeschlossen. Der Token-Austausch erfolgt von Server zu Server, genauso wie beim browserbasierten OAuth-Verknüpfungsfluss. Wenn ein Fehlercode zurückgegeben wird, wird der Verknüpfungsablauf mit den alternativen Optionen fortgesetzt.

Ändern Sie Ihre iOS-App, um App Flip zu unterstützen

Um App Flip zu unterstützen, nehmen Sie die folgenden Codeänderungen an Ihrer iOS-App vor:

  1. Griff NSUserActivityTypeBrowsingWeb in AppDelegate.
  2. Capture redirect_uri und state aus der URL später zu verwenden.
  3. Überprüfen Sie, ob redirect_uri Matches dieses Format:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Stellen Sie sicher, dass die Client-ID mit dem erwarteten Wert übereinstimmt. Verwenden Sie das folgende Codebeispiel:

    func application(_ application: UIApplication,
                     continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([Any]?) -> Void) -> Bool
    {
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
            let incomingURL = userActivity.webpageURL,
            let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false),
            let params = components.queryItems else {
                return false
        }
    
        if let clientId = params.filter({$0.name == "client_id"}).first?.value,
            let state = params.filter({$0.name == "state"}).first?.value,
            let redirectUri = params.filter({$0.name == "redirect_uri"}).first?.value {
    
            // Save the redirect_uri and state for later...
    
            // Verify the client id
            return (clientId == GOOGLE_CLIENT_ID)
        } else {
            // Missing required parameters
            return false
        }
    }
    
  5. Rufen Sie nach erfolgreicher Autorisierung den Umleitungs-URI mit dem Autorisierungscode auf. Verwenden Sie das folgende Codebeispiel:

    func returnAuthCode(code: String, state: String, redirectUri: String) {
        var redirectURL = URL(string: redirectUri)
        var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false)
    
        // Return the authorization code and original state
        let paramAuthCode = URLQueryItem(name: "code", value: code)
        let paramState = URLQueryItem(name: "state", value: state)
        components?.queryItems = [paramAuthCode, paramState]
        if let resultURL = components?.url {
            UIApplication.shared.open(
                resultURL,
                options: [UIApplicationOpenURLOptionUniversalLinksOnly : true],
                completionHandler: nil)
        }
    }
    
  6. Wenn ein Fehler aufgetreten ist, hängen Sie stattdessen ein Fehlerergebnis an den Umleitungs-URI an. Verwenden Sie das folgende Codebeispiel:

    func returnError(redirectUri: String) {
        var redirectURL = URL(string: redirectUri)
        var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false)
    
        // Return the authorization code and original state
        let paramError = URLQueryItem(name: "error", value: "invalid_request")
        let paramDescription = URLQueryItem(name: "error_description", value: "Invalid Request")
        components?.queryItems = [paramError, paramDescription]
        if let resultURL = components?.url {
            UIApplication.shared.open(
                resultURL,
                options: [UIApplicationOpenURLOptionUniversalLinksOnly : true],
                completionHandler: nil)
        }
    }
    

Wenn der universelle Link Ihrer App von der Google-App geöffnet wird, enthält er die folgenden Abfrageparameter:

  • client_id ( String ): Google client_id , die unter Ihrer App registriert ist.
  • scope ( List of String ): Eine Liste von durch Leerzeichen getrennte Bereiche angefordert.
  • state ( String ): Ein Nonce von Google verwendet , um zu überprüfen , dass das Genehmigungsergebnis in Reaktion auf Googles abgehende Anforderung ist.
  • redirect_uri ( String ): Googles Universal-Link. Der "Flip"-URI zum Öffnen der Google-App und zum Weitergeben der Ergebnisse.

Parameter, die verwendet werden, wenn das Autorisierungsergebnis erfolgreich zurückgegeben wird:

  • code ( String ): Der Wert des Autorisierungscodes, falls vorhanden.
  • state ( String ): Der genaue Wert aus der eingehenden Universal-Verbindung empfangen.

Parameter, die verwendet werden, wenn das Autorisierungsergebnis nicht erfolgreich zurückgegeben wird:

  • error ( String ), mit den folgenden Werten:

    • cancelled : behebbarer Fehler. Die Google App versucht, das Konto mithilfe der Autorisierungs-URL zu verknüpfen. Einige Beispiele sind, dass sich der Benutzer nicht anmelden kann, ein Gerät offline ist oder eine Zeitüberschreitung der Verbindung.
    • unrecoverable : Ein nicht behebbarer Fehler. Der Benutzer versucht beispielsweise, eine Verknüpfung mit einem deaktivierten Konto herzustellen. Die Google App bricht die Kontoverknüpfung ab.
    • invalid_request : Die Anfrage sind Parameter ungültig sind oder fehlen. Dies ist ein behebbarer Fehler. Die Google App versucht, das Konto mithilfe der Autorisierungs-URL zu verknüpfen.
    • access_denied : Der Benutzer lehnt die Zustimmung Anfrage. Dies ist ein nicht behebbarer Fehler; die Google-App bricht die Verknüpfung ab.
  • error_description ( String , optional): Eine benutzerfreundliche Fehlermeldung.

Für alle Fehlertypen, müssen Sie die Antwortdaten an dem angegebenen Rück REDIRECT_URI der geeignete Rückfall wird trigerred zu gewährleisten.

Ändern Sie Ihren Autorisierungsendpunkt, um App Flip zu unterstützen

Konfigurieren Sie Ihre Plattform so, dass Anfragen über die App Flip-Weiterleitungs-URLs von Google akzeptiert werden:

  • Google - Startseite App
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.dev
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.enterprise
    https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.dev
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.enterprise
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast
    
  • Google - Assistent App
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA.dev
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA.enterprise
    https://oauth-redirect.googleusercontent.com/a/com.google.OPA
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.dev
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.enterprise
    https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA
    

Überprüfen Sie, ob client_id und die angegebene URL durch den redirect_uri Parameter die erwarteten Werten übereinstimmen , wenn eine Anforderung empfangen wird. wenn die Client - Überprüfung fehlschlägt, geben Sie den Fehler invalid_request zum redirect_uri .