Как открыть кастомную схему в android с помощью java
Я использую эту библиотеку OAuth https://github.com/openid/AppAuth-Android Я зарегистрировал собственную схему
<activity android:name="net.openid.appauth.RedirectUriReceiverActivity">
<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="kronos"
android:host="oauth2"/> <!-- Redirect URI scheme -->
</intent-filter>
</activity>
И у меня есть такие методы:
private void authorize() {
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
mServiceConfiguration,
"...", // Client ID
ResponseTypeValues.CODE,
Uri.parse("kronos://oauth2/callback") // Redirect URI
).setScope("auth").build();
AuthorizationService service = new AuthorizationService(this);
Intent intent = service.getAuthorizationRequestIntent(authRequest);
startActivityForResult(intent, REQUEST_CODE_AUTH);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE_AUTH) {
Log.d(TAG, "get the token");
return;
}else{
Log.d(TAG, "wrong code");
return;
}
Он работает нормально, но теперь я хочу обрабатывать настраиваемый URL-адрес, например, "kronos://something", так что вот 2 вопроса:
- можно ли выполнить обработку в onActivityResult и как?
-Могу ли я вызвать этот пользовательский протокол в Chrome для тестирования (как в iOS с сафари)?
Изменить: чтобы быть более точным, я получаю настраиваемый URL-адрес при выходе пользователя из системы, чтобы удалить токен OAuth
EDIT2 Я добавил это в манифест
<activity android:name=".activity_logoff">
<intent-filter>
<data android:scheme="kronos"
android:host="something"/> <!-- Redirect URI scheme -->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
Но я не знаю, как заставить приложение перехватывать все URL "kronos: // something"
EDIT3 Теперь я создал намерение, которое может понадобиться
Uri logoutUri = Uri.parse("kronos://something");
Intent logoutIntent1 = new Intent(Intent.ACTION_VIEW,logoutUri);
EDIT4 Я добавил
logoutIntent1.setPackage(getApplicationContext().getPackageName());
Но что делать дальше
1 ответ
Что ты хочешь этого kronos://something
за? Есть ли что-нибудь с ответом на аутентификацию? Если нет, то oAuth здесь не при чем.
Вы близки к объявлению activity_logoff. Все, что вам нужно сделать, это позвонить:context.startActivity(logoutIntent1)
- где context может быть любым Activity.