OAuth и пользовательская схема приводят к "ERR_UNKNOWN_URL_SCHEME" в Chrome
Я застрял на этом часами, так как раньше работала, но внезапно перестала вести себя так, как ожидалось. Я действительно не знаю, как и почему, поскольку я перепроверяю каждую строку кода в процессе, не имея возможности увидеть, что неправильно, поэтому я прошу вас, ребята, о помощи.
Хорошо. Таким образом, у меня есть активность LoginScreen
с кнопкой, запускающей новый Intent.ACTION_VIEW
при щелчке. Это запустит процесс OAUTH в браузере с ApiManager.OAUTH_CALLBACK_URI
, установленным на stjapp://oauthresponse
.
Здесь моя часть AndroidManifest.xml
для этой операции:
<activity
android:name=".LoginScreen"
android:label="@string/application"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="stjapp" android:host="oauthresponse" />
</intent-filter>
</activity>
Как я начинаю Intent.ACTION_VIEW
в своей деятельности:
private View.OnClickListener loginHandler = new View.OnClickListener() {
public void onClick(View v) {
OAuthClientRequest request = null;
try {
request = OAuthClientRequest
.authorizationLocation(ApiManager.OAUTH_AUTHORIZE)
.setClientId(ApiManager.CLIENT_ID).setRedirectURI(ApiManager.OAUTH_CALLBACK_URI)
.buildQueryMessage();
}
catch (OAuthSystemException e) { e.printStackTrace(); }
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(request.getLocationUri() + "&response_type=code"));
startActivity(intent);
}
};
И вот скриншот того, что происходит в браузере:
![enter image description here]()
Там я должен вернуться к своей работе LoginScreen
и обрабатывать параметры запроса code
в методе onNewIntent
, но... да, вещь больше не работает так, как ожидалось.
Любая помощь была оценена.
Ответы
Ответ 1
Похоже, это Chromium bug. Обходной путь, который я использую, - это целевая страница PHP для RedirectURI, которая открывает приложение через JavaScript (на который не влияет эта ошибка):
<script language="javascript">
window.location = 'myscheme://myhost/?<?=$_SERVER["QUERY_STRING"]?>';
</script>
Ответ 2
Я имел ту же ошибку и разрешил ее, префикс url с помощью http://
.
Ответ 3
В Chrome версии 40 и выше эта ошибка появилась снова, но только если вы вручную вводите URL-адрес страницы переадресации в адресной строке. Проблема заключается в отслеживании хрома здесь.
Ответ с "обходным путем", вставленный из проблемы:
ОК, я выяснил, что перенаправление окна .location через намерение будет work, AS LONG, поскольку он щелкнут по внешнему источнику или ссылке на стр. Если вы вручную вводите адрес страницы перенаправления в адресной строке, перенаправление/открытие приложения не будет выполнено с указанным ошибка.
Таким образом, отправка ссылки на страницу перенаправления по электронной почте или SMS будет работать просто отлично, когда пользователь нажимает на ссылку. Вручную введите адрес в адресную строку не удастся. window.location = chromeUrl;
должен работать просто отлично.
Ответ 4
только если вы вручную вводите URL-адрес страницы переадресации в адресной строке. Проблема заключается в отслеживании хромовой проблемы здесь.
Ответ с "обходным путем", вставленный из проблемы:
Хорошо, я выяснил, что перенаправление window.location через намерение будет работать, AS LONG, поскольку оно нажимается на внешний источник или ссылку на странице. Если вы вручную вводите адрес страницы перенаправления в адресную строку, перенаправление/открытие приложения завершится с ошибкой.
Таким образом, отправка ссылки на страницу переадресации по электронной почте или SMS будет очень удобной, если пользователь нажмет на ссылку. Вручную ввести адрес в адресную строку не удастся. window.location = chromeUrl; должен работать нормально.