我在类中有以下代码:
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url)
{
if (url.startsWith(Constants.OAUTH_REDIRECT))
{
Uri uri = Uri.parse(url);
String state = uri.getQueryParameter("state");
if (state != null && state.equals(Constants.randString))
{
String error = uri.getQueryParameter("error");
if (error != null && error.length() > 0)
{
if (error.equals("access_denied"))
{
//user chose not to login
Log.d("oAuthView", "Access Denied");
finish();
}
else
{
Toast.makeText(getApplicationContext(), error, Toast.LENGTH_LONG).show();
finish();
}
}
//Go back to MainActivity with authorization code
Intent resultIntent = getIntent();
resultIntent.putExtra("authCode", uri.getQueryParameter("code"));
setResult(RESULT_OK, resultIntent);
finish();
return true;
}
}
return false;
}
出于某种原因,我在尝试捕获" state"时得到一个空值,即使我已经确定它在URL中。这意味着应用程序永远不会进入后面的if语句。我也检查过,当我尝试捕获authCode时会发生同样的事情。关于他们为什么会返回null的任何想法?
编辑:出于某种原因,当我尝试其他网址方案时,它会正确解析。
我需要解析但不起作用的网址: http://www.website.com/#access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit
一个有效的类似网址: http://www.website.com/?state=cnmdr6&code=tokenStringHere
什么会导致第一个解析失败,但第二个解析会正确解析?
答案 0 :(得分:1)
如果有人正在寻找解决方案。
您的网址无效,因为您在查询网址之前错过了问号?
。
您的网址应如下所示:
http://www.website.com/?access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit
请检查documentation。