Ошибка входа в OAuth2 через Android Webview - PullRequest
0 голосов
/ 25 февраля 2020

Я использую Discord, чтобы позволить пользователю войти в мое приложение android. Код выглядит следующим образом:

MainActivity. xml

<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">
<FrameLayout
        android:id="@+id/webview_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MyActivity">
    <WebView
            android:id="@+id/authWebView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="invisible"
            app:layout_anchorGravity="center" />
</FrameLayout>

DiscordOAuth. java:

package com.example.oauth2test;

import android.app.Activity;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;

class DiscordOAuth {
    private static final String LOG_TAG = "Discord OAuth 2 Login";


    public void getAuthentication(Activity activity) {

        String authURL = "https://discordapp.com/login";

        WebView authWebView = activity.findViewById(R.id.authWebView);
        authWebView.getSettings().setJavaScriptEnabled(true); // enable javascript
        authWebView.getSettings().setAppCacheEnabled(true);
        authWebView.getSettings().setLoadWithOverviewMode(true);
        authWebView.getSettings().setUseWideViewPort(true);
        authWebView.getSettings().setBuiltInZoomControls(true);
        authWebView.getSettings().setSupportMultipleWindows(true);
        authWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        authWebView.setWebViewClient(new WebViewClient());

        authWebView.loadUrl(authURL);
        authWebView.setVisibility(View.VISIBLE);
    }
}

, когда выше выполняется, вы получите страницу входа в систему, но когда вы попытаетесь войти в систему, на мгновение появится анимация загрузки, и вы вернетесь на страницу входа даже без успеха или ошибки

после поиска Я подозреваю, что проблема связана с несколькими windows и как с ними бороться, но я не уверен.

Конечная цель - использовать oauth2 через WebView для входа в систему, чтобы разойтись и получить имя пользователя пользователя

1 Ответ

0 голосов
/ 25 февраля 2020

Реализуйте AuthCallback интерфейс в вашем классе, и вы получите ответ в методах обратного вызова

...