en un clic
revyl-cli-auth-bypass-android
// Native Android leaf recipe for test-only auth bypass deep links using Revyl launch intent extras.
// Native Android leaf recipe for test-only auth bypass deep links using Revyl launch intent extras.
Create robust Revyl E2E tests using CLI commands from app source analysis or exploratory sessions.
Create and maintain Revyl tests through MCP tools using create/update operations and execution feedback loops.
MCP dev-first mobile loop for reliable screenshot-observe-action execution, grounded interactions, and conversion of successful exploratory paths into tests.
Analyze failed Revyl test, workflow, and device-session reports via CLI to classify real bugs, flaky tests, infra issues, setup failures, or test-design improvements.
Expo and Expo Router leaf recipe for test-only auth bypass deep links using Revyl launch variables.
Flutter leaf recipe for test-only auth bypass deep links using Revyl launch variables.
| name | revyl-cli-auth-bypass-android |
| description | Native Android leaf recipe for test-only auth bypass deep links using Revyl launch intent extras. |
Use this leaf skill when revyl-cli-auth-bypass has selected a native Android app. This is app code guidance, not a Revyl authentication shortcut.
For the first-pass setup, start from revyl-cli-auth-bypass; it detects the stack, applies the shared safety contract, and delegates here for Android/Kotlin implementation details.
revyl dev list, screenshots, or reports can answer the question..claude/skills slash-command discovery plus WebFetch/WebSearch or configured MCP/browser tools; Cursor .cursor/skills plus .cursor/rules/revyl-skills.mdc and available MCP/browser tools.revyl device screenshot or revyl device report instead of claiming browser access.Use one app-specific deep link shape:
myapp://revyl-auth?token=<token>&role=<role>&redirect=<allowlisted-route>
Revyl launch variables arrive in Android emulator apps as string extras on the launch intent:
REVYL_AUTH_BYPASS_ENABLED=true
REVYL_AUTH_BYPASS_TOKEN=<token>
AndroidManifest.xml: register the app URL scheme and revyl-auth host.intent and handle onCreate / onNewIntent.Register the deep link on the activity that receives app links:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp" android:host="revyl-auth" />
</intent-filter>
Keep route mapping and session creation app-specific:
private val allowedRedirects = mapOf(
"/account" to AppRoute.Account,
"/checkout" to AppRoute.Checkout,
"/cart" to AppRoute.Cart,
)
private val allowedRoles = setOf("buyer", "support")
data class RevylAuthConfig(val enabled: Boolean, val token: String?)
fun revylAuthConfig(intent: Intent?): RevylAuthConfig {
return RevylAuthConfig(
enabled = intent?.getStringExtra("REVYL_AUTH_BYPASS_ENABLED") == "true",
token = intent?.getStringExtra("REVYL_AUTH_BYPASS_TOKEN"),
)
}
fun handleRevylAuthBypass(intent: Intent?, config: RevylAuthConfig): Boolean {
val uri = intent?.data ?: return false
if (uri.scheme != "myapp" || uri.host != "revyl-auth") return false
val role = uri.getQueryParameter("role") ?: "buyer"
val redirect = uri.getQueryParameter("redirect") ?: "/account"
check(config.enabled) { "Revyl auth bypass is disabled" }
check(uri.getQueryParameter("token") == config.token) { "Bad Revyl auth bypass token" }
check(role in allowedRoles) { "Role is not allowlisted" }
val route = allowedRedirects[redirect] ?: error("Redirect is not allowlisted")
TestSession.signIn(role)
appRouter.navigate(route)
return true
}
In the activity, capture the launch config before handling links:
private lateinit var revylAuthConfig: RevylAuthConfig
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
revylAuthConfig = revylAuthConfig(intent)
handleAuthLink(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
handleAuthLink(intent)
}
private fun handleAuthLink(intent: Intent?) {
try {
if (handleRevylAuthBypass(intent, revylAuthConfig)) showAuthBypassAccepted()
} catch (error: Throwable) {
showAuthBypassRejected(error.message ?: "Auth bypass rejected")
}
}
Replace TestSession, appRouter, and status UI helpers with the app's real surfaces.
Start a fresh Revyl session with launch vars attached:
export REVYL_AUTH_BYPASS_TOKEN="<test-only-token>"
revyl global launch-var update REVYL_AUTH_BYPASS_TOKEN --value "$REVYL_AUTH_BYPASS_TOKEN"
revyl dev --platform android --no-build \
--launch-var REVYL_AUTH_BYPASS_ENABLED \
--launch-var REVYL_AUTH_BYPASS_TOKEN
Then verify valid and rejected links:
revyl device navigate --url "myapp://revyl-auth?token=$REVYL_AUTH_BYPASS_TOKEN&role=buyer&redirect=%2Fcheckout"
revyl device screenshot --out /tmp/revyl-auth-bypass-android-valid.png
revyl device navigate --url "myapp://revyl-auth?token=wrong-token&role=buyer&redirect=%2Fcheckout"
revyl device navigate --url "myapp://revyl-auth?token=$REVYL_AUTH_BYPASS_TOKEN&role=admin&redirect=%2Fcheckout"
revyl device navigate --url "myapp://revyl-auth?token=$REVYL_AUTH_BYPASS_TOKEN&role=buyer&redirect=%2Fadmin"
revyl device screenshot --out /tmp/revyl-auth-bypass-android-rejected.png
REVYL_AUTH_BYPASS_ENABLED=true.