java - Android WebView 未加载 Instagram 授权
问题描述
我目前正在尝试学习如何使用 Instagram api 来授权 instagram 帐户并在我的应用程序中获取基本信息。
我正在使用一个简单的 WebView 来加载授权 URL。但是当我按下按钮加载 WebView 时,它会在 webview 中显示 instagram 登录页面:https : //i.imgur.com/rM9NBYJ.jpg,而不是应该看起来像https://i的授权页面.imgur.com/ez80umn.jpg。
当我将链接插入我的 chrome 浏览器(这是我获得屏幕截图的方式)但在 WebView 中时,该链接工作正常。
我怎样才能让它显示授权页面?
public class MainActivity extends AppCompatActivity {
private WebView webView;
Button loginButton;
String url = "https://api.instagram.com/oauth/authorize/?client_id=" +
"xxxxxxxxxxx&redirect_uri=https://www.google.com/&response_type=code";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
loginButton = findViewById(R.id.instagramButton);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initializeWebView();
}
});
}
private void initializeWebView(){
webView.loadUrl(url);
webView.setWebViewClient(new WebViewClient(){
String access_token;
boolean authComplete;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url.contains("#access_token=") && !authComplete) {
Uri uri = Uri.parse(url);
access_token = uri.getEncodedFragment();
access_token = access_token.substring(access_token.lastIndexOf("=") + 1);
Log.e("access_token", access_token);
authComplete = true;
} else if (url.contains("?error")) {
Log.e("access_token", "errir fetching access token");
}
}
});
}
}
(是的,我正在用正确的客户端 ID 替换 url 中的 x)
活动主.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="300dp">
</WebView>
<Button
android:id="@+id/instagramButton"
android:layout_below="@id/webView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Instagram login"/>
</RelativeLayout>
解决方案
我有点晚了,但仅适用于可能遇到此问题的其他人:
WebSettings settings = wv.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
有了这个,我的 instagram 登录显示很好。
关于您发布的两张图片,我看到第一张是您未登录的情况,而第二张是因为您已经登录,所以要求您授权您的帐户。所以,只需输入您的电子邮件和密码( ?)。
推荐阅读
- android - 在新活动而不是当前活动中触发画中画
- proof - 下面证明 NP hard 或 P 方程
- json - bash shell 脚本从文件中由双引号分隔的特定行获取子字符串
- java - Spring JPA @Converter - 如何使用自己的 id 作为盐来加密实体?
- azure-devops - 在 Azure DevOps 发布定义中从同一个项目部署多个 WebJobs?
- python - Python 模块无法识别全局别名
- php - 如何使用库加密 codeigniter 从数据库中加密 ID 值?
- angularjs - 路由不工作,页面显示空白?
- visual-c++ - 无法将变量添加到编辑控件,错误:“对象引用未设置为对象实例”
- c# - QueryAsync DynamoDB with Index (Partition Key and Short Key) .Net Core