App Flip untuk iOS

Penautan Flip Aplikasi berbasis OAuth (App Flip) membuka aplikasi iOS Anda dari aplikasi Google untuk membantu pengguna aplikasi Google menautkan akun mereka dengan lebih mudah. Anda perlu membuat sedikit perubahan kode pada aplikasi iOS Anda untuk menerapkan fitur ini.

Dalam dokumen ini, Anda mempelajari cara memodifikasi aplikasi iOS Anda untuk mendukung App Flip.

Coba sampelnya

App Balik sampel aplikasi menunjukkan akun menghubungkan integrasi pada iOS itu App flip-kompatibel. Anda dapat menggunakan aplikasi ini untuk memverifikasi cara merespons tautan universal App Flip yang masuk dari aplikasi seluler Google.

Aplikasi sampel telah dikonfigurasikan untuk mengintegrasikan dengan App Balik Uji Alat untuk iOS , yang dapat Anda gunakan untuk memverifikasi integrasi Anda iOS aplikasi dengan App Balik sebelum Anda mengkonfigurasi akun menghubungkan dengan Google. Aplikasi ini mensimulasikan tautan universal yang dipicu oleh aplikasi seluler Google saat App Flip diaktifkan.

Bagaimana itu bekerja

Berikut ini adalah langkah-langkah alur yang dilakukan Google app dan aplikasi Anda saat App Flip terjadi:

  1. Google app mencoba membuka tautan universal aplikasi Anda. Ini dapat membuka aplikasi Anda jika diinstal pada perangkat pengguna dan dikaitkan dengan tautan universal. Lihat Mendukung Universal Link untuk rincian.

  2. Cek aplikasi Anda bahwa client_id dan redirect_uri parameter dikodekan dalam URL masuk cocok link Google yang universal yang diharapkan.

  3. Aplikasi Anda meminta kode otorisasi dari server OAuth2 Anda. Di akhir alur ini, aplikasi Anda mengembalikan kode otorisasi atau kesalahan ke Google app. Untuk melakukan ini, itu membuka tautan universal Google dengan parameter yang ditambahkan untuk kode otorisasi atau kesalahan.

  4. Aplikasi Google menangani tautan universal Google yang masuk dan melanjutkan alur lainnya. Jika kode otorisasi diberikan, penautan segera diselesaikan. Pertukaran token terjadi dari server ke server, seperti yang terjadi pada aliran penautan OAuth berbasis browser. Jika kode kesalahan dikembalikan, alur penautan berlanjut dengan opsi alternatif.

Ubah aplikasi iOS Anda untuk mendukung App Flip

Untuk mendukung App Flip, buat perubahan kode berikut ke aplikasi iOS Anda:

  1. Menangani NSUserActivityTypeBrowsingWeb di App Delegasi.
  2. Capture redirect_uri dan state parameter dari URL untuk digunakan kemudian.
  3. Periksa redirect_uri pertandingan format ini:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Verifikasi bahwa ID klien cocok dengan nilai yang diharapkan. Gunakan contoh kode berikut:

    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. Setelah otorisasi berhasil, panggil URI redirect dengan kode otorisasi. Gunakan contoh kode berikut:

    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. Jika terjadi kesalahan, lampirkan hasil kesalahan ke URI pengalihan. Gunakan contoh kode berikut:

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

Saat dibuka oleh Google app, tautan universal aplikasi Anda menyertakan parameter kueri berikut:

  • client_id ( String ): Google client_id bahwa ini terdaftar di bawah aplikasi Anda.
  • scope ( List of String ): Daftar lingkup ruang yang dipisahkan diminta.
  • state ( String ): Sebuah Nonce digunakan oleh Google untuk memverifikasi bahwa hasil otorisasi dalam menanggapi permintaan keluar Google.
  • redirect_uri ( String ): link universal Google. URI "balik" untuk membuka Google app dan meneruskan hasil.

Parameter yang digunakan saat hasil otorisasi berhasil dikembalikan:

  • code ( String ): Nilai dari kode otorisasi, jika tersedia.
  • state ( String ): Nilai sebenarnya diterima dari link yang universal masuk.

Parameter yang digunakan saat hasil otorisasi tidak berhasil dikembalikan:

  • error ( String ), dengan nilai berikut:

    • cancelled : Sebuah kesalahan dipulihkan. Google app akan mencoba menautkan akun menggunakan URL otorisasi. Beberapa contohnya adalah pengguna yang gagal masuk, perangkat sedang offline, atau waktu koneksi habis.
    • unrecoverable : Sebuah kesalahan tidak terpulihkan. Misalnya, pengguna mencoba menautkan dengan akun yang dinonaktifkan. Aplikasi Google akan membatalkan penautan akun.
    • invalid_request : Permintaan parameter tidak valid atau hilang. Ini adalah kesalahan yang dapat dipulihkan. Google app akan mencoba menautkan akun menggunakan URL otorisasi.
    • access_denied : Pengguna menolak permintaan persetujuan. Ini adalah kesalahan yang tidak dapat dipulihkan; aplikasi Google membatalkan penautan.
  • error_description ( String , opsional): Sebuah pesan kesalahan user-friendly.

Ubah titik akhir otorisasi Anda untuk mendukung App Flip

Konfigurasikan platform Anda untuk menerima permintaan menggunakan URL pengalihan App Flip Google:

  • Beranda Google 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 Asisten aplikasi
    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
    

Periksa client_id dan URL yang ditentukan oleh redirect_uri parameter sesuai dengan nilai-nilai yang diharapkan ketika permintaan diterima.