Приложение Flip для iOS

Связывание App Flip на основе OAuth (App Flip) открывает ваше приложение iOS из приложения Google, чтобы пользователю приложения Google было проще связать свою учетную запись. Чтобы реализовать эту функцию, вам необходимо внести незначительные изменения в код приложения iOS.

В этом документе вы узнаете, как изменить свое приложение iOS для поддержки App Flip.

Попробуйте образец

App Флип образец приложение показывает счет связывающих интеграции на прошивке , что это приложение Флип-совместимый. Вы можете использовать это приложение, чтобы проверить, как отвечать на входящую универсальную ссылку App Flip из мобильных приложений Google.

Образец приложение предварительно настроено для интеграции с App Флипа инструментом для тестирования прошивки , которую можно использовать для проверки интеграции вашего IOS приложения с App Флипом перед настройкой учетной записи связи с Google. Это приложение имитирует универсальную ссылку, активируемую мобильными приложениями Google, когда включен App Flip.

Как это работает

Следующие шаги выполняются приложением Google и вашим приложением, когда происходит переворот приложения:

  1. Приложение Google пытается открыть универсальную ссылку вашего приложения. Он может открыть ваше приложение, если оно установлено на устройстве пользователя и связано с универсальной ссылкой. См Поддержка универсальной ссылки для деталей.

  2. Ваши проверки приложений , что client_id и redirect_uri параметр закодирован в поступающем URL соответствуют ожидаемой ссылке Google универсальной.

  3. Ваше приложение запрашивает код авторизации с вашего сервера OAuth2. В конце этого потока ваше приложение возвращает либо код авторизации, либо ошибку в приложение Google. Для этого он открывает универсальную ссылку Google с добавленными параметрами для кода авторизации или ошибки.

  4. Приложение Google обрабатывает входящую универсальную ссылку Google и продолжает остальную часть потока. Если предоставлен код авторизации, связывание завершается немедленно. Обмен токенами происходит от сервера к серверу, так же, как это происходит в потоке связывания OAuth на основе браузера. Если возвращается код ошибки, процесс связывания продолжается с альтернативными вариантами.

Измените свое приложение iOS для поддержки App Flip

Для поддержки App Flip внесите следующие изменения кода в свое приложение iOS:

  1. Ручка NSUserActivityTypeBrowsingWeb в вашем App делегата.
  2. Захват redirect_uri и state параметры из URL , чтобы использовать позже.
  3. Проверьте , что redirect_uri матчи в этом формате:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Убедитесь, что идентификатор клиента соответствует ожидаемому значению. Используйте следующий пример кода:

    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. После успешной авторизации вызовите URI перенаправления с кодом авторизации. Используйте следующий пример кода:

    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. Если произошла ошибка, вместо этого прикрепите результат ошибки к URI перенаправления. Используйте следующий пример кода:

    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)
        }
    }
    

При открытии приложением Google универсальная ссылка вашего приложения включает следующие параметры запроса:

  • client_id ( String ): Google client_id , зарегистрированный под вашим приложением.
  • scope ( List of String ): список А , разделенных пробелами областей запрошенных.
  • state ( String ): случайное слово используется Google , чтобы убедиться , что результат авторизации в ответ на исходящий запрос Google.
  • redirect_uri ( String ): Google, универсальная связь. «Перевернуть» URI, чтобы открыть приложение Google и передать результаты.

Параметры, используемые при успешном возврате результата авторизации:

  • code ( String ): Значение кода авторизации, если таковые имеются.
  • state ( String ): Точное значение , полученное от входящей универсальной связи.

Параметры, используемые при неудачном возврате результата авторизации:

  • error ( String ), со следующими значениями:

    • cancelled : Ошибка извлечения. Приложение Google попытается установить связь с аккаунтом, используя URL-адрес авторизации. Некоторые примеры: пользователь не может войти в систему, устройство находится в автономном режиме или время ожидания соединения истекло.
    • unrecoverable : неисправимая ошибка. Например, пользователь пытается установить связь с отключенной учетной записью. Приложение Google отменит привязку учетной записи.
    • invalid_request : запрос параметров являются недопустимыми или отсутствуют. Это исправимая ошибка. Приложение Google попытается установить связь с аккаунтом, используя URL-адрес авторизации.
    • access_denied : Пользователь отклоняет запрос на согласие. Это неисправимая ошибка; приложение Google прерывает установление связи.
  • error_description ( String , опционально): Сообщение об ошибке удобно.

Для всех типов ошибок, вы должны возвратить данные ответа на указанный REDIRECT_URI , чтобы обеспечить соответствующий запасной вариант является trigerred.

Измените конечную точку авторизации для поддержки App Flip

Настройте свою платформу для приема запросов с использованием URL-адресов перенаправления Google App Flip:

  • Google Главная приложение
    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 Помощник приложения
    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
    

Убедитесь , что client_id и URL задается redirect_uri параметра соответствуют ожидаемым значениям при получении запроса. если проверка клиента не удается, вернуть ошибку invalid_request к redirect_uri .