Pet*_* O. 5 android android-jetpack-compose jetpack-compose-navigation
我正在尝试通过 ViewModel 中的codeGitHub Oauth API获取. 我的可组合屏幕配置:playground://gh?code=XYZsavedStateHandler
NavGraphBuilder.composable(
route = "login",
deepLinks = listOf(navDeepLink {
uriPattern = "playground://gh?code={code}"
})
) {
Log.d("MyLog", it.arguments?.getString("code", "nothing") ?: "null")
//...
}
Run Code Online (Sandbox Code Playgroud)
MyLog总是nothing
我也尝试实现该NavGraphBuilder.composable.arguments参数,但结果是一样的。
我刚刚熟悉 Compose 并完成了 Google Code 实验室。https://developer.android.com/codelabs/jetpack-compose-navigation#4 - 这按预期工作,但问题是需要参数。
我还有一个需要 URL 并且可以工作的 WebViewScreen 可组合项。
builder.composable(
route = "browser",
arguments = listOf(
navArgument("url") {
type = NavType.StringType
}
),
deepLinks = listOf(
navDeepLink {
uriPattern = "playground://gh/browser/{url}"
}
)
) {
//...
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否可以通过 Jetpack Compose Navigation 来实现,还是我必须使用Intent将其传递给 的方法ViewModel?
我和你的情况一样,正在熟悉 Jetpack Compose 并构建一个使用 OAuth 身份验证的应用程序。
在完成您提到的相同 Codelab 后,我已设法从深层链接 uri 获取授权代码。
尝试将此代码添加到您的 MainActivity 以确保您的回调 uri 包含身份验证代码:
override fun onResume() {
super.onResume()
val data: Uri? = intent?.data
val code = data?.getQueryParameter("code")
Log.d("MainActivity", "oauth code - $code")
}
Run Code Online (Sandbox Code Playgroud)
它对我有用,当身份验证重定向到我的应用程序时,我可以在日志中看到代码。
不过,我使用的是不同的方法,我使用隐式意图将用户重定向到端点进行身份验证,并且我没有使用 Github API。
编辑:
以下是可组合参数:
composable(
route = "OAuthRedirectWithCode",
arguments = listOf(navArgument("code") { type = NavType.StringType }),
deepLinks = listOf(navDeepLink { uriPattern = "$uri?code={code}" })
) { backStackEntry ->
val code = backStackEntry.arguments?.getString("code")
Log.d("NavHost", "oauth code - $code")
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |