我在一个类中有以下代码:
@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吗?
编辑:由于某种原因,当我尝试替代的URL方案时,它可以正确解析。
我需要解析但无法正常工作的URL: http://www.website.com/#access_token=tokenstringhere&token_type=bearer&state=randomStringHere&expires_in=3600&scope=identity+submit
一个类似的可行的URL: http://www.website.com/?state=cnmdr6&code=tokenStringHere
是什么造成第一次解析失败而第二次可以正确解析?
url
,uri
的注销日志吗? - blurfus