App Flip برای iOS

پیوند دادن App Flip مبتنی بر OAuth (App Flip) برنامه iOS شما را از یک برنامه Google باز می کند تا به کاربر برنامه Google کمک کند حساب خود را راحت تر پیوند دهد. برای پیاده سازی این ویژگی باید تغییرات جزئی کد را در برنامه iOS خود ایجاد کنید.

در این سند، یاد می گیرید که چگونه برنامه iOS خود را برای پشتیبانی از App Flip تغییر دهید.

نمونه را امتحان کنید

فلیپ برنامه برنامه نمونه نشان می دهد یک حساب کاربری ایجاد ارتباط بین ادغام در iOS است که برنامه فلیپ سازگار است. می‌توانید از این برنامه برای تأیید نحوه پاسخگویی به پیوند جهانی App Flip ورودی از برنامه‌های تلفن همراه Google استفاده کنید.

برنامه نمونه پیش برای ادغام با برنامه تلنگر ابزار تست برای iOS ، که شما می توانید به منظور بررسی ادغام خود را در iOS برنامه با فلیپ نرم افزار قبل از پیکربندی حساب ارتباط با گوگل استفاده کنید. این برنامه پیوند جهانی ایجاد شده توسط برنامه های تلفن همراه Google را هنگامی که App Flip فعال است شبیه سازی می کند.

چگونه کار می کند

در زیر مراحل جریانی وجود دارد که برنامه Google و برنامه شما هنگام رخ دادن App Flip انجام می‌دهند:

  1. برنامه Google تلاش می کند پیوند جهانی برنامه شما را باز کند. اگر برنامه شما روی دستگاه کاربر نصب شده باشد و با پیوند جهانی مرتبط باشد، می‌تواند آن را باز کند. مشاهده حمایت جهانی ها برای جزئیات بیشتر.

  2. چک برنامه شما که client_id و redirect_uri پارامتر کد گذاری شده در URL ورودی منطبق انتظار می رود لینک گوگل جهانی است.

  3. برنامه شما یک کد مجوز از سرور OAuth2 شما درخواست می کند. در پایان این جریان، برنامه شما یک کد مجوز یا یک خطا را به برنامه Google برمی‌گرداند. برای انجام این کار، پیوند جهانی Google را با پارامترهای ضمیمه شده برای کد مجوز یا خطا باز می کند.

  4. برنامه Google پیوند جهانی ورودی Google را مدیریت می کند و با بقیه جریان ادامه می دهد. در صورت ارائه کد مجوز، پیوند بلافاصله تکمیل می شود. تبادل توکن از سرور به سرور انجام می شود، به همان روشی که در جریان پیوند OAuth مبتنی بر مرورگر انجام می شود. اگر یک کد خطا برگردانده شود، جریان پیوند با گزینه های جایگزین ادامه می یابد.

برنامه iOS خود را برای پشتیبانی از App Flip تغییر دهید

برای پشتیبانی از App Flip، کد زیر را در برنامه iOS خود تغییر دهید:

  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. پس از تأیید موفقیت آمیز، URI تغییر مسیر را با کد مجوز تماس بگیرید. از نمونه کد زیر استفاده کنید:

    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 ): لیست A از حوزه فاصله از هم جدا درخواست شده است.
  • state ( String ): یک فعلی استفاده شده توسط گوگل که به منظور بررسی نتیجه مجوز در پاسخ به درخواست های خروجی گوگل است.
  • redirect_uri ( String ): لینک جهانی گوگل است. URI "تلنگر" برای باز کردن برنامه Google و ارسال نتایج.

پارامترهای مورد استفاده در هنگام بازگشت موفقیت آمیز نتیجه مجوز:

  • code ( String ): ارزش کد مجوز، در صورت موجود بودن.
  • state ( String ): مقدار دقیق دریافت شده از لینک جهانی ورودی.

پارامترهای مورد استفاده در هنگام بازگشت ناموفق نتیجه مجوز:

  • error ( String )، با مقادیر زیر:

    • cancelled : یک خطای قابل بازیابی. برنامه Google سعی می‌کند حساب را با استفاده از URL مجوز پیوند دهد. برخی از مثال‌ها عبارتند از عدم ورود کاربر به سیستم، آفلاین بودن دستگاه یا اتمام زمان اتصال.
    • unrecoverable : یک خطای غیر قابل. به عنوان مثال، کاربر تلاش می کند با یک حساب غیرفعال پیوند برقرار کند. برنامه Google پیوند حساب را متوقف می کند.
    • invalid_request : درخواست پارامترهای نامعتبر یا مفقود هستند. این یک خطای قابل بازیابی است. برنامه Google سعی می‌کند حساب را با استفاده از URL مجوز پیوند دهد.
    • access_denied : کاربر درخواست رضایت رد می کند. این یک خطای غیر قابل بازیابی است. برنامه Google پیوند را قطع می کند.
  • error_description ( String ، اختیاری): یک پیغام خطا کاربر پسند.

برای تمام انواع خطا، شما باید اطلاعات را پاسخ به مشخص بازگشت REDIRECT_URI برای اطمینان از مناسب مجدد trigerred است.

نقطه پایان مجوز خود را برای پشتیبانی از App Flip تغییر دهید

پلتفرم خود را برای پذیرش درخواست ها با استفاده از URL های تغییر مسیر Google App Flip پیکربندی کنید:

  • صفحه اصلی 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 .