iOS için Uygulama Çevirme

OAuth tabanlı Uygulama Çevirme bağlantısı (Uygulama Çevirme), Google uygulaması kullanıcısının hesabını daha kolay bağlamasına yardımcı olmak için iOS uygulamanızı bir Google uygulamasından açar. Bu özelliği uygulamak için iOS uygulamanızda küçük kod değişiklikleri yapmanız gerekir.

Bu belgede, iOS uygulamanızı App Flip'i destekleyecek şekilde nasıl değiştireceğinizi öğreneceksiniz.

örneği deneyin

Uygulama Ayaklı örnek uygulaması App Ayaklı-uyumlu iOS'ta entegrasyon bağlayan bir hesap gösterir. Google mobil uygulamalarından gelen bir App Flip evrensel bağlantısına nasıl yanıt vereceğinizi doğrulamak için bu uygulamayı kullanabilirsiniz.

Örnek uygulaması ile entegre şekilde önceden iOS için Uygulama çevirin Testi Aracı size yapılandırmak Google ile bağlantı hesabı önce App Flip ile iOS uygulamasının entegrasyonunu doğrulamak için kullanabileceğiniz. Bu uygulama, Uygulama Çevirme etkinleştirildiğinde Google mobil uygulamaları tarafından tetiklenen evrensel bağlantıyı simüle eder.

Nasıl çalışır

Aşağıdakiler, Uygulama Çevirme gerçekleştiğinde Google uygulamasının ve uygulamanızın aldığı akış adımlarıdır:

  1. Google uygulaması, uygulamanızın evrensel bağlantısını açmaya çalışır. Kullanıcının cihazında yüklüyse ve evrensel bağlantıyla ilişkilendirilmişse uygulamanızı açabilir. Bkz Evrensel Linkler Destekleme detaylar için.

  2. Bu uygulama, kontrol eder client_id ve redirect_uri gelen URL kodlanmış parametre beklenen Google evrensel bağlantısını eşleşir.

  3. Uygulamanız, OAuth2 sunucunuzdan bir yetkilendirme kodu ister. Bu akışın sonunda uygulamanız, Google uygulamasına bir yetkilendirme kodu veya bir hata döndürür. Bunu yapmak için, yetkilendirme kodu veya hata için eklenen parametrelerle Google'ın evrensel bağlantısını açar.

  4. Google uygulaması, gelen Google evrensel bağlantısını işler ve akışın geri kalanıyla devam eder. Yetkilendirme kodu verilirse, bağlantı hemen tamamlanır. Belirteç değişimi, tarayıcı tabanlı OAuth bağlantı akışında olduğu gibi sunucudan sunucuya gerçekleşir. Bir hata kodu döndürülürse, bağlantı akışı alternatif seçeneklerle devam eder.

iOS uygulamanızı App Flip'i destekleyecek şekilde değiştirin

App Flip'i desteklemek için iOS uygulamanızda aşağıdaki kod değişikliklerini yapın:

  1. Kulp NSUserActivityTypeBrowsingWeb App Delegesi içinde.
  2. Yakalama redirect_uri ve state URL'den parametreler daha sonra kullanmak.
  3. Kontrol edin redirect_uri eşleşir bu formatı:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. İstemci kimliğinin beklenen değerle eşleştiğini doğrulayın. Aşağıdaki kod örneğini kullanın:

    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. Başarılı yetkilendirmenin ardından, yetkilendirme koduyla yeniden yönlendirme URI'sini arayın. Aşağıdaki kod örneğini kullanın:

    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. Bir hata oluştuysa, bunun yerine yönlendirme URI'sine bir hata sonucu ekleyin. Aşağıdaki kod örneğini kullanın:

    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 uygulaması tarafından açıldığında, uygulamanızın evrensel bağlantısı aşağıdaki sorgu parametrelerini içerir:

  • client_id ( String ): Google client_id uygulamanızda altında kayıtlı olduğunu 's.
  • scope ( List of String ): İstenen boşlukla ayrılmış kapsamları listesi.
  • state ( String ): Google tarafından kullanılan bir nonce doğrulama sonuç Google'ın giden isteğine yanıt olarak olduğunu doğrulamak için.
  • redirect_uri ( String ): Google'ın evrensel bağlantı. Google uygulamasını açmak ve sonuçları iletmek için "çevirme" URI'si.

Yetkilendirme sonucu başarıyla döndürüldüğünde kullanılan parametreler:

  • code ( String ): onay kodunun değeri, varsa.
  • state ( String ): Gelen evrensel bağlantıdan alınan tam değer.

Yetkilendirme sonucu başarısız olarak döndürüldüğünde kullanılan parametreler:

  • error ( String şu değerlerle):

    • cancelled : Bir kurtarılabilir hata. Google uygulaması, yetkilendirme URL'sini kullanarak hesap bağlamayı deneyecektir. Bazı örnekler, kullanıcının oturum açamaması, bir cihazın çevrimdışı olması veya bağlantı zaman aşımına uğramasıdır.
    • unrecoverable : Bir hata. Örneğin, kullanıcı devre dışı bırakılmış bir hesapla bağlantı kurmaya çalışır. Google uygulaması hesap bağlamayı iptal eder.
    • invalid_request : İsteğe parametreleri geçersiz veya eksik. Bu kurtarılabilir bir hatadır. Google uygulaması, yetkilendirme URL'sini kullanarak hesap bağlamayı deneyecektir.
    • access_denied : Kullanıcı izni talebini reddeder. Bu, kurtarılamaz bir hatadır; Google uygulaması bağlantı oluşturmayı durdurur.
  • error_description ( String , opsiyonel): Bir kullanıcı dostu bir hata mesajı.

Tüm hata türlerinde, belirtilen yanıt verilerini geri dönmelidir REDIRECT_URI uygun yedek trigerred sağlamak için.

App Flip'i desteklemek için yetkilendirme uç noktanızı değiştirin

Google'ın App Flip yönlendirme URL'lerini kullanarak istekleri kabul etmek için platformunuzu yapılandırın:

  • Google Ana uygulaması
    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 Yardımcısı uygulaması
    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
    

Olmadığını kontrol client_id ve belirtilen URL redirect_uri bir istek alındığında parametresi beklenen değerleri eşleştirmek. İstemci doğrulaması başarısız olursa, hata döndürür invalid_request için redirect_uri .