Android WebView не загружает авторизацию Instagram

В настоящее время я пытаюсь узнать, как использовать API Instagram для авторизации учетных записей Instagram и получения базовой информации в моем приложении.

Я использую простой WebView для загрузки URL авторизации. Но когда я нажимаю кнопку, чтобы загрузить 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");
             }
         }
     });
}
}

(Да, я заменяю х в URL-адресе на правильный идентификатор клиента)

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_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>

0 ответов

Я немного опоздал, но только для тех, кто может столкнуться с этой проблемой:

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

При этом мой инстаграм логин показывает нормально.

Что касается двух изображений, которые вы разместили, я вижу, что первое из них на случай, если вы не вошли в систему, а второе запрашивает авторизацию вашей учетной записи, потому что вы уже вошли в систему. Итак, просто введите свой адрес электронной почты и пароль (?).

Другие вопросы по тегам