【发布时间】:2020-11-04 12:33:54
【问题描述】:
我正在尝试在 Android 应用程序中使用 Oauth2 从 Reddit api 获取身份验证令牌。我只是想从我的 Android 应用程序中使用 Reddit api,并且必须使用 Oauth2 来实现这一点。在我的应用程序中,webview 用于将用户导航到以下页面。
如果用户点击允许,应用会从 Reddit 接收授权码,以便它可以向 Reddit api 发出 api 请求。从上面可以看出,将用户导航到上述页面的 url 适用于桌面 chrome 浏览器。然而,在 Android 模拟器中,我可以从 webview 看到 reddit 上的加载页面,但是 webview 突然消失,并在 Logcat 上出现以下错误:
“从源 'https://www.redditmedia.com' 访问 XMLHttpRequest 已被 CORS 策略阻止:没有'访问权限' -Control-Allow-Origin' 标头出现在请求的资源上。”
在为 Oauth2 创建 reddit 应用程序时,我选择了“已安装的应用程序”。以下是我正在使用的网址:
这是我用于 webview 的代码:
web.loadUrl(url);
web.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("","page started");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
我的 webview 适用于其他 url,但由于某种原因我猜不是这个。如果有人可以看一下,我将不胜感激。提前谢谢!
【问题讨论】:
-
在标题中输入“访问控制允许来源:*”。检查此以获取更多信息stackoverflow.com/questions/17272612/…
-
非常感谢您的回复。按照您的建议,我在我的 webview 客户端中添加了以下方法,但它仍然无法正常工作。
public boolean shouldOverrideUrlLoading(WebView view, String url) { Map<String, String> map = new HashMap<String, String>(); map.put("Access-Control-Allow-Origin", url); view.loadUrl(url); return false; }在标题中,我应该在“Access-Control-Allow-Origin”旁边放什么?我只是放了网址,但这似乎不对。 -
你必须在 loadUrl 中传递 map .. 检查它的标题添加 stackoverflow.com/questions/7610790/…
-
映射
extraHeaders = new HashMap (); extraHeaders.put("Access-Control-Allow-Origin", /* 你的域名在这里 */); host.loadUrl(url,extraHeaders); -
我acutally注意到我的愚蠢错误并将我的代码修改为`view.loadUrl(url,map);`而不是`view.loadUrl(url);`同样的问题仍然存在..也许我不应该为此使用 shouldOverrideUrlLoading 方法?不管怎样,谢谢你的帮助。
标签: java android webview oauth-2.0 reddit