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:
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.
Bu uygulama, kontrol eder
client_id
veredirect_uri
gelen URL kodlanmış parametre beklenen Google evrensel bağlantısını eşleşir.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.
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:
- Kulp
NSUserActivityTypeBrowsingWeb
App Delegesi içinde. - Yakalama
redirect_uri
vestate
URL'den parametreler daha sonra kullanmak. - 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
İ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 } }
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) } }
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) } }
Uygulamanızın evrensel bağlantısı için sorgu parametreleri
Google uygulaması tarafından açıldığında, uygulamanızın evrensel bağlantısı aşağıdaki sorgu parametrelerini içerir:
-
client_id
(String
): Googleclient_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.
Google'ın evrensel bağlantısı için sorgu parametreleri
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
.