Я очень застрял в проблеме, на которую потратил много времени и много разных проб и ошибок.
Мое приложение использует OAuth 2.0 для отправки изображения поставщику.(Kiteworks), который является безопасным хранилищем.У Kiteworks есть собственный API, позволяющий это делать.
Мое приложение запускает страницу входа, пользователь входит в систему и перенаправляется на URL-адрес обратного вызова, в котором есть код авторизации.
Сейчас я пытаюсь добиться того, чтобы, когда эта страница была нажата, она снова перенаправлялась в мое приложение, но самое главное, что для этого требуется код авторизации, чтобы я мог использовать его для обмена токена и отправки изображения.
Вот код, который я попробовал, который позволяет мне открывать URL-адрес перенаправления с моим приложением (дает мне выбор приложения или хрома).То, на что я надеялся, что когда я выбрал приложение, оно сохраняло бы код авторизации, но это не так:
Манифест:
<activity
android:name=".Kiteworks_SignIn"
android:launchMode="singleTop"
android:noHistory="true"
android:screenOrientation="behind"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.LAUNCHER" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="https"
android:host="sync.almacgroup.com"
android:pathPrefix="/rest/callback">
<!--https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1-->
</data>
/>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Активность входа в Kiteworks:
browser = findViewById(R.id.buttonBrowser);
browser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
browserIntent = new Intent(Intent.ACTION_VIEW, uri);
startActivityForResult(browserIntent, authcode);
if (browserIntent != null && browserIntent.getData() != null && "https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1".equals(browserIntent.getData().getScheme())) {
authcode = Integer.parseInt(getIntent().getData().getQueryParameter("code"));
// complete oauth flow
setResult(Activity.RESULT_OK);
finish();
} else {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1"))
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND);
startActivityForResult(browserIntent, authcode);
setResult(Activity.RESULT_OK);
finish();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
authcode = Integer.parseInt(getIntent().getData().getQueryParameter("code"));
Toast.makeText(this, authcode, Toast.LENGTH_SHORT).show();
}
} catch (Exception ex) {
Toast.makeText(Kiteworks_SignIn.this, ex.toString(),
Toast.LENGTH_LONG).show();
}
}
Кто-нибудь знает, где я ошибаюсь или какой-либо другой способ добиться этого?
Буду признателен за любую помощь :)