İOS için App Flip

OAuth tabanlı Uygulama Çevirme bağlantısı (Uygulama Çevirme), Google uygulaması kullanıcısının hesapları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 dene

App Flip örnek uygulaması , iOS'ta App Flip uyumlu bir hesap bağlama entegrasyonunu 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 uygulama, Google ile hesap bağlantısını yapılandırmadan önce iOS uygulamanızın App Flip ile entegrasyonunu doğrulamak için kullanabileceğiniz iOS için Uygulama Çevirme Test Aracı ile entegre olacak şekilde önceden yapılandırılmıştır. 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ğıda, Google uygulamasının ve uygulamanızın Uygulama Çevirme gerçekleştiğinde uyguladığı akış adımları verilmiştir:

  1. Google uygulaması, uygulamanızın evrensel bağlantısını açmaya çalışır. Kullanıcının cihazına yüklüyse ve evrensel bağlantıyla ilişkilendirilmişse uygulamanızı açabilir. Ayrıntılar için Evrensel Bağlantıları Destekleme konusuna bakın.

  2. Uygulamanız, gelen URL'de kodlanan client_id ve redirect_uri parametresinin beklenen Google evrensel bağlantısıyla eşleşip eşleşmediğini kontrol eder.

  3. Uygulamanız, OAuth2 sunucunuzdan bir yetkilendirme kodu istiyor. Bu akışın sonunda, uygulamanız Google uygulamasına ya bir yetkilendirme kodu ya da 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. Bir yetkilendirme kodu sağlanırsa, 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.

İOS 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. NSUserActivityTypeBrowsingWeb Uygulama Temsilcinizde NSUserActivityTypeBrowsingWeb .
  2. Daha sonra kullanmak üzere URL'den redirect_uri ve state parametrelerini yakalayın.
  3. redirect_uri şu biçimle eşleşip eşleşmediğini kontrol edin:
    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 çağırı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şursa, 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 ): Uygulamanıza kayıtlı Google client_id .
  • scope ( List of String ): İstenen boşlukla ayrılmış kapsamların bir listesi.
  • state ( String ): Yetkilendirme sonucunun Google'ın giden isteğine yanıt olduğunu doğrulamak için Google tarafından kullanılan bir nonce.
  • redirect_uri ( String ): Google'ın evrensel bağlantısı. Google uygulamasını açmak ve sonuçları geçmek için URI'yi "çevirin".

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

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

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

  • error ( String ), aşağıdaki değerlerle:

    • cancelled : Kurtarılabilir bir hata. Google uygulaması, yetkilendirme URL'sini kullanarak hesabı bağlamayı deneyecektir. Bazı örnekler, kullanıcının oturum açmaması, bir cihazın çevrimdışı olması veya bağlantının zaman aşımına uğramasıdır.
    • unrecoverable : Google uygulaması, hesap bağlamayı iptal eder. Örneğin, devre dışı bırakılmış bir hesap veya reddedilen yetkilendirme, hesapların bağlanmasını engeller.
    • invalid_request : İstek parametreleri geçersiz veya eksik.
  • error_description ( String , isteğe bağlı): Kullanıcı dostu bir hata mesajı.

Yetkilendirme uç noktanızı App Flip'i destekleyecek şekilde değiştirin

Platformunuzu, Google'ın Uygulama Çevirme yönlendirme URL'lerini kullanarak istekleri kabul edecek şekilde yapılandırın:

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

client_id ve redirect_uri parametresi tarafından belirtilen URL'nin, bir istek alındığında beklenen değerlerle eşleşip eşleşmediğini kontrol edin.