Я использую android WebView
для загрузки страницы входа Instagram. Он загружается отлично, и я вижу его на экране. После этого я нажимаю кнопку «Войти через Facebook», которая перенаправляет меня на страницу входа в Facebook. Я ввожу свои учетные данные в Facebook и нажимаю кнопку входа в систему. После этого Facebook перенаправляет меня обратно в Instagram для перенаправления URI (который равен https://www.instagram.com/accounts/signup), и эта страница загружается бесконечно (если я выполняю те же операции в браузере, Facebook перенаправляет меня на ту же страницу, но эта страница не загружается бесконечно, но перенаправляет меня на мою страницу профиля учетной записи Instagram). Что я могу сделать, чтобы предотвратить бесконечную загрузку? Вот мой код Activity
с WebView
и скриншот экрана с этой страницейAndroid-страница instagram в webview бесконечно загружается
public class InstagramAuthActivity extends BaseActivity implements InstagramRepository.OnLoadListener<String> {
public static final String EXTRA_COOKIES = "cookies_instagram";
public static final String EXTRA_USERNAME = "username_instagram";
private static final String URL = "https://www.instagram.com";
private ViewHolder mViewHolder;
private String mCookies;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_instagram_auth);
createViewHolder();
populateViewHolder();
}
private void createViewHolder() {
mViewHolder = new ViewHolder();
mViewHolder.mAuthWebView = (WebView) findViewById(R.id.auth);
}
private void populateViewHolder() {
WebSettings settings = mViewHolder.mAuthWebView.getSettings();
settings.setJavaScriptEnabled(true);
mViewHolder.mAuthWebView.setWebViewClient(new InstagramWebViewClient());
mViewHolder.mAuthWebView.loadUrl(URL);
}
@Override
public void onLoad(String data) {
if (data != null) {
Intent intent = new Intent();
intent.putExtra(EXTRA_COOKIES, mCookies);
intent.putExtra(EXTRA_USERNAME, data);
setResult(RESULT_OK, intent);
} else {
setResult(RESULT_CANCELED);
}
finish();
}
@Override
public void onFail() {
setResult(RESULT_CANCELED);
finish();
}
private class ViewHolder {
WebView mAuthWebView;
}
private class InstagramWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String cookies = CookieManager.getInstance().getCookie(url);
Log.d("tag", "url: " + url + "; cookies: " + cookies);
if (cookies.contains("ds_user_id")) {
mCookies = cookies;
String[] cookieData = cookies.split("; ");
if (cookieData != null && cookieData.length > 1) {
String[] idData = null;
for (String cookie : cookieData) {
if (cookie.contains("ds_user_id")) {
idData = cookie.split("=");
break;
}
}
if (idData != null && idData.length > 1) {
InstagramRepository.getInstance(InstagramAuthActivity.this).getUsername(idData[1], InstagramAuthActivity.this);
}
}
}
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
}
}
}
Здесь также регистрирует все URL, к которому я перенаправлен
09-14 10:53:14.555 21316-21316/ru.luckybook D/tag: url: https://www.instagram.com/
09-14 10:53:15.539 21316-21316/ru.luckybook D/tag: url: https://www.instagram.com/
09-14 10:53:22.048 21316-21316/ru.luckybook D/tag: url: https://m.facebook.com/login.php?skip_api_login=1&api_key=124024574287414&signed_next=1&next=https%3A%2F%2Fm.facebook.com%2Fv1.0%2Fdialog%2Foauth%3Fredirect_uri%3Dhttps%253A%252F%252Fwww.instagram.com%252Faccounts%252Fsignup%252F%26scope%3Demail%26response_type%3Dtoken%252Cgranted_scopes%26client_id%3D124024574287414%26ret%3Dlogin%26logger_id%3D7b5f7abf-6769-464a-86e9-a26e8301375d&cancel_url=https%3A%2F%2Fwww.instagram.com%2Faccounts%2Fsignup%2F%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%23_%3D_&display=touch&locale=ru_RU&logger_id=7b5f7abf-6769-464a-86e9-a26e8301375d&_rdr
09-14 10:53:46.864 21316-21316/ru.luckybook D/tag: url: https://www.instagram.com/accounts/signup/
переопределить метод 'onPageFinished' и проверить, вызвано это или нет. –
Я сделал это. onPageFinished и я напечатал url в журналах. Это https://www.instagram.com/accounts/signup То же, что и в браузере. Но в браузере я перенаправлен с этой страницы на страницу профиля, но в WebView эта страница ничего не делает. Он просто показывает индикатор выполнения. –
Я думаю, что есть некоторые проблемы с вашим URL. Для меня он перенаправляется на вход в facebook. Поместите журналы в метод ошибок и проверьте там. –