From 2e9274803560e221cb7d18de55af7f701d1f636e Mon Sep 17 00:00:00 2001 From: itaihanski Date: Thu, 4 Jan 2024 18:38:16 +0200 Subject: [PATCH] Add custom scheme for opera users --- README.md | 11 +++++++++++ .../main/java/com/descope/internal/routes/Flow.kt | 15 +++++++++------ .../src/main/java/com/descope/sdk/Routes.kt | 4 +++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b8c70b78..1ed955b0 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,16 @@ class FlowDoneActivity : AppCompatActivity() { + + + + + + + + + + ``` @@ -268,6 +278,7 @@ unexpected UX. Run the flow by creating a `DescopeFlow.Runner`: Descope.flow.create( flowUrl = "", deepLinkUrl = "", + backupCustomScheme = "" ).start(this@MainActivity) ``` diff --git a/descopesdk/src/main/java/com/descope/internal/routes/Flow.kt b/descopesdk/src/main/java/com/descope/internal/routes/Flow.kt index b0fe5b46..3c1f9a05 100644 --- a/descopesdk/src/main/java/com/descope/internal/routes/Flow.kt +++ b/descopesdk/src/main/java/com/descope/internal/routes/Flow.kt @@ -6,7 +6,6 @@ import androidx.browser.customtabs.CustomTabsIntent import com.descope.internal.http.DescopeClient import com.descope.internal.others.with import com.descope.sdk.DescopeFlow -import com.descope.sdk.DescopeLogger import com.descope.sdk.DescopeLogger.Level.Info import com.descope.types.AuthenticationResponse import com.descope.types.DescopeException @@ -24,8 +23,8 @@ internal class Flow( override var currentRunner: DescopeFlow.Runner? = null private set - override fun create(flowUrl: String, deepLinkUrl: String): DescopeFlow.Runner { - val runner = FlowRunner(flowUrl, deepLinkUrl) + override fun create(flowUrl: String, deepLinkUrl: String, backupCustomScheme: String?): DescopeFlow.Runner { + val runner = FlowRunner(flowUrl, deepLinkUrl, backupCustomScheme) currentRunner = runner return runner } @@ -33,6 +32,7 @@ internal class Flow( inner class FlowRunner( private val flowUrl: String, private val deepLinkUrl: String, + private val backupCustomScheme: String?, ) : DescopeFlow.Runner { private lateinit var codeVerifier: String @@ -54,11 +54,14 @@ internal class Flow( val codeChallenge = Base64.UrlSafe.encode(hashed) // embed into url parameters - val uri = Uri.parse(flowUrl).buildUpon() + val uriBuilder = Uri.parse(flowUrl).buildUpon() .appendQueryParameter("ra-callback", deepLinkUrl) .appendQueryParameter("ra-challenge", codeChallenge) .appendQueryParameter("ra-initiator", "android") - .build() + backupCustomScheme?.let { + uriBuilder.appendQueryParameter("ra-backup-callback", it) + } + val uri = uriBuilder.build() // launch via chrome custom tabs launchUri(context, uri) @@ -91,7 +94,7 @@ internal class Flow( } } - + } private fun launchUri(context: Context, uri: Uri) { diff --git a/descopesdk/src/main/java/com/descope/sdk/Routes.kt b/descopesdk/src/main/java/com/descope/sdk/Routes.kt index cc0937f4..5159d155 100644 --- a/descopesdk/src/main/java/com/descope/sdk/Routes.kt +++ b/descopesdk/src/main/java/com/descope/sdk/Routes.kt @@ -774,8 +774,10 @@ interface DescopeFlow { * * @property flowUrl the URL where the flow is hosted. * @property deepLinkUrl a deep link back to the app that will handle the exchange. + * @property backupCustomScheme a backup custom scheme deep link for Opera browser users, + * which blocks app links by default. */ - fun create(flowUrl: String, deepLinkUrl: String): Runner + fun create(flowUrl: String, deepLinkUrl: String, backupCustomScheme: String? = null): Runner /** * A helper interface that encapsulates a single flow run.