IOS के लिए ऐप फ्लिप

OAuth-आधारित ऐप फ्लिप लिंकिंग (ऐप फ्लिप) आपके आईओएस ऐप को Google ऐप से खोलता है ताकि Google ऐप उपयोगकर्ता को अपने खाते को अधिक आसानी से लिंक करने में मदद मिल सके। इस सुविधा को लागू करने के लिए आपको अपने iOS ऐप में मामूली कोड परिवर्तन करने होंगे।

इस दस्तावेज़ में, आप सीखते हैं कि ऐप फ्लिप का समर्थन करने के लिए अपने आईओएस ऐप को कैसे संशोधित किया जाए।

नमूना का प्रयास करें

अनुप्रयोग फ्लिप नमूना एप्लिकेशन अनुप्रयोग फ्लिप-संगत है iOS पर एकीकरण जोड़ने एक खाता दर्शाता है। आप इस ऐप का उपयोग यह सत्यापित करने के लिए कर सकते हैं कि Google मोबाइल ऐप से आने वाले ऐप फ्लिप यूनिवर्सल लिंक का जवाब कैसे दिया जाए।

नमूना अनुप्रयोग के साथ एकीकृत करने के लिए पहले से कॉन्फ़िगर है iOS के लिए App फ्लिप टेस्ट उपकरण है, जो आप इससे पहले कि आप कॉन्फ़िगर गूगल के साथ जोड़ने खाता अनुप्रयोग फ्लिप के साथ अपने iOS ऐप्लिकेशन का एकीकरण सत्यापित करने के लिए उपयोग कर सकते हैं। ऐप फ्लिप सक्षम होने पर यह ऐप Google मोबाइल ऐप द्वारा ट्रिगर किए गए यूनिवर्सल लिंक का अनुकरण करता है।

यह काम किस प्रकार करता है

ऐप फ्लिप होने पर Google ऐप और आपका ऐप निम्नलिखित फ़्लो स्टेप्स लेता है:

  1. Google ऐप आपके ऐप के युनिवर्सल लिंक को खोलने का प्रयास करता है। यदि यह उपयोगकर्ता के उपकरण पर स्थापित है और युनिवर्सल लिंक से संबद्ध है, तो यह आपके ऐप को खोलने में सक्षम है। देखें यूनिवर्सल लिंक सहायक जानकारी के लिए।

  2. आपके ऐप ने जांच करता है कि client_id और redirect_uri पैरामीटर भेजे URL में एन्कोडेड उम्मीद Google सार्वभौमिक लिंक मेल खाता है।

  3. आपका ऐप आपके OAuth2 सर्वर से एक प्राधिकरण कोड का अनुरोध करता है। इस प्रवाह के अंत में, आपका ऐप या तो प्राधिकरण कोड लौटाता है या Google ऐप को कोई त्रुटि देता है। ऐसा करने के लिए, यह प्राधिकरण कोड या त्रुटि के लिए संलग्न मापदंडों के साथ Google का सार्वभौमिक लिंक खोलता है।

  4. Google ऐप आने वाले Google यूनिवर्सल लिंक को संभालता है और शेष प्रवाह के साथ जारी रहता है। यदि एक प्राधिकरण कोड प्रदान किया जाता है, तो लिंकिंग तुरंत पूर्ण हो जाती है। टोकन एक्सचेंज सर्वर-टू-सर्वर होता है, ठीक उसी तरह जैसे यह ब्राउज़र-आधारित OAuth लिंकिंग प्रवाह में होता है। यदि कोई त्रुटि कोड लौटाया जाता है, तो वैकल्पिक विकल्पों के साथ लिंकिंग प्रवाह जारी रहता है।

ऐप फ्लिप का समर्थन करने के लिए अपने आईओएस ऐप को संशोधित करें

ऐप फ्लिप का समर्थन करने के लिए, अपने आईओएस ऐप में निम्नलिखित कोड परिवर्तन करें:

  1. संभाल NSUserActivityTypeBrowsingWeb अपने अनुप्रयोग प्रतिनिधि में।
  2. कब्जा redirect_uri और state पैरामीटर URL से बाद में उपयोग करने के लिए।
  3. कि चेक redirect_uri मैचों इस प्रारूप:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. सत्यापित करें कि क्लाइंट आईडी अपेक्षित मान से मेल खाता है। निम्नलिखित कोड नमूने का प्रयोग करें:

    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. सफल प्राधिकरण पर, प्राधिकरण कोड के साथ रीडायरेक्ट यूआरआई को कॉल करें। निम्नलिखित कोड नमूने का प्रयोग करें:

    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. यदि कोई त्रुटि हुई है, तो इसके बजाय पुनर्निर्देशित URI में त्रुटि परिणाम संलग्न करें। निम्नलिखित कोड नमूने का प्रयोग करें:

    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 ऐप द्वारा खोला जाता है, तो आपके ऐप के युनिवर्सल लिंक में निम्नलिखित क्वेरी पैरामीटर शामिल होते हैं:

  • client_id ( String ): गूगल client_id अपने अनुप्रयोग के तहत पंजीकृत है कि के।
  • scope ( List of String ): अंतरिक्ष से अलग किए कार्यक्षेत्रों का अनुरोध की एक सूची।
  • state ( String ): Google द्वारा उपयोग किया अस्थायी रूप से सत्यापित करने के लिए प्राधिकरण परिणाम गूगल के निवर्तमान अनुरोध के जवाब में है।
  • redirect_uri ( String ): Google के सार्वभौमिक लिंक। Google ऐप खोलने और परिणाम पास करने के लिए "फ़्लिप" यूआरआई।

प्राधिकरण परिणाम सफलतापूर्वक लौटाए जाने पर उपयोग किए जाने वाले पैरामीटर:

  • code ( String ): प्राधिकरण कोड का मूल्य, यदि उपलब्ध है।
  • state ( String ): भेजे सार्वभौमिक लिंक से प्राप्त सही मूल्य।

प्राधिकरण परिणाम असफल होने पर उपयोग किए जाने वाले पैरामीटर:

  • error ( String ), निम्न मानों के साथ:

    • cancelled : एक वसूली योग्य त्रुटि। Google ऐप प्राधिकरण URL का उपयोग करके खाता लिंक करने का प्रयास करेगा। कुछ उदाहरण हैं उपयोगकर्ता साइन इन करने में विफल हो रहा है, डिवाइस ऑफ़लाइन है या कनेक्शन का समय समाप्त हो गया है।
    • unrecoverable : एक अप्राप्य त्रुटि। उदाहरण के लिए, उपयोगकर्ता किसी अक्षम खाते से लिंक करने का प्रयास करता है। Google ऐप खाता लिंकिंग को रोक देगा।
    • invalid_request : अनुरोध पैरामीटर अमान्य या लापता हैं। यह एक पुनर्प्राप्ति योग्य त्रुटि है। Google ऐप प्राधिकरण URL का उपयोग करके खाता लिंक करने का प्रयास करेगा।
    • access_denied : उपयोगकर्ता सहमति अनुरोध को खारिज कर दिया। यह एक गैर-वसूली योग्य त्रुटि है; Google ऐप लिंक करना बंद कर देता है।
  • error_description ( String , वैकल्पिक): एक उपयोगकर्ता के अनुकूल त्रुटि संदेश।

सभी त्रुटि प्रकारों के लिए, आपके द्वारा निर्दिष्ट के जवाब डेटा लौटना चाहिए REDIRECT_URI सुनिश्चित करने के लिए उचित fallback trigerred है।

ऐप फ्लिप का समर्थन करने के लिए अपने प्राधिकरण समापन बिंदु को संशोधित करें

Google के ऐप फ्लिप रीडायरेक्ट URL का उपयोग करके अनुरोध स्वीकार करने के लिए अपना प्लेटफ़ॉर्म कॉन्फ़िगर करें:

  • Google मुखपृष्ठ एप्लिकेशन
    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
    
  • गूगल सहायक एप्लिकेशन
    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 और URL द्वारा निर्दिष्ट redirect_uri पैरामीटर की उम्मीद मान से मेल जब एक अनुरोध प्राप्त हुआ है। अगर ग्राहक सत्यापन विफल रहता है, त्रुटि वापस invalid_request को redirect_uri