App Flip für iOS

OAuth-basierte App-Flip-Verknüpfung (App Flip) öffnet Ihre iOS-App über eine Google-App. damit Nutzer der Google App ihr Konto leichter verknüpfen können. 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.

Beispiel ausprobieren

Beispiel-App „App Flip“ zeigt eine Kontoverknüpfungsintegration unter iOS, die mit App Flip kompatibel ist. Mit dieser App kannst du überprüfen, wie du auf eingehende App Flip universelle Antworten von mobilen Google-Apps aus.

Die Beispiel-App ist für die Integration in das App-Flip-Testtool für iOS Damit können Sie die Integration Ihrer iOS-App mit App-Flip überprüfen, konfigurieren Sie die Kontoverknüpfung mit Google. Diese App simuliert den universellen Link wird von mobilen Google-Apps ausgelöst, wenn App Flip aktiviert ist.

Funktionsweise

Die Google App und Ihre App führen folgende Schritte aus, wenn App-Flip:

  1. Die Google App versucht, den universellen Link Ihrer App zu öffnen. Sie kann Ihre App öffnen, wenn sie auf dem Gerät des Nutzers installiert und mit den universellen Link. Weitere Informationen finden Sie unter Unterstützen von universellen Links.

  2. Deine App prüft, ob die Parameter client_id und redirect_uri codiert sind in der eingehenden URL mit dem erwarteten universellen Google-Link übereinstimmt.

  3. Ihre Anwendung fordert einen Autorisierungscode von Ihrem OAuth2-Server an. Am Ende dieses Vorgangs gibt Ihre Anwendung entweder einen Autorisierungscode oder einen Fehler an der Google App. Dazu wird der universelle Link von Google mit angehängten -Parameter für den Autorisierungscode oder -fehler.

  4. Die Google App verarbeitet die eingehende universelle Google-Verknüpfung und fährt mit für den Rest des Ablaufs. Wenn ein Autorisierungscode angegeben wird, erfolgt die Verknüpfung sofort abgeschlossen werden. Der Tokenaustausch erfolgt Server-zu-Server. wie im browserbasierten OAuth-Verknüpfungsvorgang. Wenn ein Fehlercode zurückgegeben wird, wird der Verknüpfungsvorgang mit den alternativen Optionen fortgesetzt.

iOS-App für App Flip anpassen

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

  1. Verarbeiten Sie NSUserActivityTypeBrowsingWeb in Ihrem App Delegate.
  2. Erfassen Sie die Parameter redirect_uri und state aus der URL, um sie später zu verwenden.
  3. redirect_uri muss folgendes Format haben:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Prüfen Sie, ob die Client-ID mit dem erwarteten Wert übereinstimmt. Verwenden Sie Folgendes: 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 Weiterleitungs-URI mit der Autorisierung auf. Code. 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 Weiterleitungs-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 in der Google App geöffnet wird, enthält er Folgendes: Suchparameter:

  • client_id (String): Google client_id, das unter deiner App registriert ist.
  • scope (List of String): Eine Liste der durch Leerzeichen getrennten Bereiche, die angefordert wurden.
  • state (String): Eine Nonce, mit der Google überprüft, ob die Autorisierung auf die ausgehende Anfrage von Google folgt.
  • redirect_uri (String): Universeller Link von Google. Die Umklappe Zu öffnender URI und die Ergebnisse übergeben.

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

  • code (String): Der Wert des Autorisierungscodes, falls verfügbar.
  • state (String): Der genaue Wert, der vom eingehenden universellen Link empfangen wird.

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

  • error (String) mit den folgenden Werten:

    • cancelled: Ein behebbarer Fehler. Die Google App versucht, dein Konto über die Autorisierungs-URL verknüpft werden. Ein Beispiel hierfür sind Fehler, wenn ein Gerät offline ist oder die Verbindung abbricht.
    • unrecoverable: Ein nicht behebbarer Fehler. Wenn der Nutzer beispielsweise versucht, eine Verknüpfung mit einem deaktivierten Konto herzustellen, wird die Kontoverknüpfung von der Google App abgebrochen.
    • invalid_request: Die Anfrageparameter sind ungültig oder fehlen. Dies ist ein behebbarer Fehler. Die Google App versucht, die Kontoverknüpfung mithilfe der Autorisierungs-URL zu verknüpfen.
    • access_denied: Der Nutzer lehnt die Einwilligungsanfrage ab. Dies ist ein nicht behebbarer Fehler. bricht die Verknüpfung der Google App ab.
  • error_description (String, optional): Eine nutzerfreundliche Fehlermeldung.

Für alle Fehlertypen müssen die Antwortdaten an den angegebenen REDIRECT_URI, damit das entsprechende Fallback ausgelöst wird.

Ändere deinen Autorisierungsendpunkt so, dass er App Flip unterstützt

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

  • Google Home 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 Assistant 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
    

Prüfe, ob client_id und die durch den redirect_uri-Parameter angegebene URL Sie entsprechen den erwarteten Werten, wenn eine Anfrage eingeht. wenn die Überprüfung durch den Kunden schlägt er fehl, wird der Fehler invalid_request an redirect_uri zurückgegeben.