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 menanggapi tautan universal Flip Aplikasi 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:
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.
Cek aplikasi Anda bahwa
client_id
danredirect_uri
parameter dikodekan dalam URL masuk cocok link Google yang universal yang diharapkan.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, ini membuka tautan universal Google dengan parameter yang ditambahkan untuk kode otorisasi atau kesalahan.
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, dengan cara yang sama seperti dalam 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:
- Menangani
NSUserActivityTypeBrowsingWeb
di App Delegasi. - Capture
redirect_uri
danstate
parameter dari URL untuk digunakan kemudian. - 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
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 } }
Setelah otorisasi berhasil, panggil redirect URI 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) } }
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) } }
Parameter kueri untuk tautan universal aplikasi Anda
Saat dibuka oleh Google app, tautan universal aplikasi Anda menyertakan parameter kueri berikut:
-
client_id
(String
): Googleclient_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 kueri untuk tautan universal Google
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 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.
Untuk semua jenis kesalahan, Anda harus kembali data respon terhadap ditentukan REDIRECT_URI
untuk memastikan mundur tepat dipicu.
Ubah titik akhir otorisasi Anda untuk mendukung App Flip
Konfigurasikan platform Anda untuk menerima permintaan menggunakan URL pengalihan Balik Aplikasi 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. jika verifikasi klien gagal, kembali kesalahan invalid_request
ke redirect_uri
.