Как открыть кастомную схему в 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.

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