Android WebView 未加载 Instagram 授权

Posted

技术标签:

【中文标题】Android WebView 未加载 Instagram 授权【英文标题】:Android WebView not loading Instagram Authorization 【发布时间】:2018-08-24 00:09:49 【问题描述】:

我目前正在尝试学习如何使用 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)

activity_main.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_
android:layout_
tools:context=".MainActivity">
<WebView
    android:id="@+id/webView"
    android:layout_
    android:layout_>
</WebView>
<Button
    android:id="@+id/instagramButton"
    android:layout_below="@id/webView"
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:text="Instagram login"/>

</RelativeLayout>

【问题讨论】:

【参考方案1】:

我有点晚了,但仅针对可能遇到此问题的其他人:

WebSettings settings = wv.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);

这样,我的 instagram 登录显示正常。

关于您发布的两张图片,我看到第一张是您未登录的情况,而第二张是因为您已经登录,所以要求您授权您的帐户。所以,只需输入您的电子邮件和密码 (?)。

【讨论】:

以上是关于Android WebView 未加载 Instagram 授权的主要内容,如果未能解决你的问题,请参考以下文章

Youtube 视频未加载到 android 的 webview 中

HTML5 - 在 Android WebView 中首次加载时未呈现画布

Webview android中的Paypal支付页面布局损坏可能css未正确加载?

Android WebView 混合内容未在 api 级别 < 21 中加载

Android - Webview 元素 onClick 事件未触发?

表单提交后,WebView 未加载页面