diff --git a/MIGRATION.md b/MIGRATION.md index 64c49c3..e3c537e 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -2,6 +2,32 @@ ## 1.0.6 -> 1.1.0 -Переименованы методы класса `TinkoffIdAuth`: +В связи с добавлением альтернативного способа авторизации через веб Тинькофф с помощью WebView, +переработана логика метода `createTinkoffAuthIntent(callbackUrl: Uri): Intent`. Теперь внутри него, на основе значения +`isTinkoffAppAuthAvailable(): Boolean`, происходит создание Intent для открытия или приложения Тинькофф, +или `TinkoffWebViewAuthActivity` (для прохождения авторизации в вебе). + +Рекомендуется использовать `createTinkoffAuthIntent(callbackUrl: Uri): Intent`, чтобы пользователю в любом случае была +доступна авторизации через Тинькофф: + +**Before**: + +```kotlin +if (tinkoffPartnerAuth.isTinkoffAuthAvailable()) { + val intent = tinkoffPartnerAuth.createTinkoffAuthIntent(callbackUrl) + startActivity(intent) +} else { + // The logic of disabling authorization via Tinkoff +} +``` + +**After**: + +```kotlin +val intent = tinkoffPartnerAuth.createTinkoffAuthIntent(callbackUrl) +startActivity(intent) +``` + +Изменения в методах класса `TinkoffIdAuth`: - `createTinkoffAuthIntent(callbackUrl: Uri): Intent` -> `createTinkoffAppAuthIntent(callbackUrl: Uri): Intent` -- `isTinkoffAuthAvailable(): Boolean ` -> `isTinkoffAppAuthAvailable(): Boolean ` +- `isTinkoffAuthAvailable(): Boolean` -> `isTinkoffAppAuthAvailable(): Boolean` diff --git a/README.md b/README.md index 4eb4482..a4fac61 100644 --- a/README.md +++ b/README.md @@ -46,26 +46,28 @@ implementation "ru.tinkoff.core.tinkoffauth:tinkoff-id:${version}" ### Начало Все необходимое взаимодействие в библиотеке идет только через класс `TinkoffIdAuth`. + +Чтобы начать авторизациию через Тинькофф, создайте Intent с помощью `tinkoffIdAuth.createTinkoffAuthIntent(callbackUrl)` и запустите его. +Внутри этого метода автоматически происходит создание Intent для открытия приложения Тинькофф, если оно доступно, иначе создается Intent +для открытия `TinkoffWebViewAuthActivity`, в котором возможно прохождение авторизации через веб Тинькофф. + +Вы также сами можете выбирать, какой способ авторизации использовать. Сперва проверьте, есть ли возможность пройти авторизацию через приложение Тинькофф. Для этого используйте `tinkoffIdAuth.isTinkoffAppAuthAvailable()`. -Когда флаг `isTinkoffAppAuthAvailable == true`, значит у пользователя установлено приложение Тинькофф, -через которое можно осуществить вход, используя `tinkoffPartnerAuth.createTinkoffAppAuthIntent(callbackUrl)`. -Иначе можно запустить сценарий авторизации через WebView, использую `tinkoffPartnerAuth.createTinkoffWebViewAuthIntent(callbackUrl)`. +Если флаг `isTinkoffAppAuthAvailable == true`, значит у пользователя установлено приложение Тинькофф, +через которое можно осуществить вход, используя `tinkoffIdAuth.createTinkoffAppAuthIntent(callbackUrl)`. +Иначе можно запустить сценарий авторизации через WebView, используя `tinkoffIdAuth.createTinkoffWebViewAuthIntent(callbackUrl)`. ### Выполнение авторизации Для авторизации: 1. Необходимо создать объект `TinkoffIdAuth(applicationContext, clientId, redirectUri)` - это основной класс для работы с библиотекой. -2. На основе значения `tinkoffIdAuth.isTinkoffAppAuthAvailable()` выбрать способ авторизации. Запустить партнерскую авторизацию, передав в качестве аргумента `callbackUrl` ваш AppLink/DeepLink (по данному uri приложение группы Тинькофф вернется обратно после процесса авторизации) +2. Создать Intent для выбранного способа авторизации, передав в качестве аргумента `callbackUrl` - ваш AppLink/DeepLink (по данному uri приложение группы Тинькофф вернется обратно после процесса авторизации), запустить его ```kotlin - val intent = if (tinkoffPartnerAuth.isTinkoffAppAuthAvailable()) { - tinkoffPartnerAuth.createTinkoffAppAuthIntent(callbackUrl) - } else { - tinkoffPartnerAuth.createTinkoffWebViewAuthIntent(callbackUrl) - } + val intent = tinkoffIdAuth.createTinkoffAuthIntent(callbackUrl) startActivity(intent) ``` -3. После прохождения пользователем авторизации в приложении Тинькофф, произойдет переход в ваше приложение на основе `callbackUrl`. В `intent.data` будет храниться информация по авторизации. +3. После прохождения пользователем авторизации через Тинькофф, произойдет переход в ваше приложение на основе `callbackUrl`. В `intent.data` будет храниться информация по авторизации. ### Завершение авторизации Успешность авторизации можно проверить методом - `tinkoffIdAuth.getStatusCode(uriFromIntentData)`. Метод вернет статус `SUCCESS` или `CANCELLED_BY_USER` @@ -139,16 +141,17 @@ implementation "ru.tinkoff.core.tinkoffauth:tinkoff-id:${version}" Базовый класс для работы c авторизацией -| Функция | Описание | -| ---------------------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `isTinkoffAppAuthAvailable(): Boolean` | Выполняет проверку возможна ли авторизация через приложения группы Тинькофф на данном устройстве | -| `createTinkoffAppAuthIntent(callbackUrl: Uri): Intent` | Создает Intent для открытия приложения группы Тинькофф для прохождения авторизации. На вход принимает Uri для создания AppLink/DeepLink, по которому будет осуществлен переход после окончания процесса авторизации | -| `createTinkoffWebViewAuthIntent(callbackUrl: Uri): Intent` | Создает Intent для открытия `TinkoffWebViewAuthActivity` для прохождения авторизации в вебе. На вход принимает Uri для создания AppLink/DeepLink, по которому будет осуществлен переход после окончания процесса авторизации | -| `getTinkoffTokenPayload(uri: Uri): TinkoffCall` | Возвращает объект, который позволяет получить синхронно информацию о токене, которая придет к вам в `intent.data` после авторизации в Тинькофф | -| `getStatusCode(uri: Uri): TinkoffIdStatusCode?` | Позволяет получить статус выполнения авторизации из `intent.data` пришедшего к вам | -| `obtainTokenPayload(refreshToken: String): TinkoffCall` | Возвращает объект, который позволяет синхронно обновить токен по рефреш токену полученному ранее | -| `signOutByAccessToken(accessToken: String): TinkoffCall` | Возвращает объект, который позволяет синхронно разлогинить по accessToken | -| `signOutByRefreshToken(refreshToken: String): TinkoffCall` | Возвращает объект, который позволяет синхронно разлогинить по refreshToken | +| Функция | Описание | +| ---------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `createTinkoffAuthIntent(callbackUrl: Uri): Intent` | Создает Intent для открытия приложения группы Тинькофф, если оно доступно, иначе для `TinkoffWebViewAuthActivity`, чтобы авторизоваться через веб Тинькофф. На вход принимает Uri для создания AppLink/DeepLink, по которому будет осуществлен переход после окончания процесса авторизации | +| `isTinkoffAppAuthAvailable(): Boolean` | Выполняет проверку возможна ли авторизация через приложения группы Тинькофф на данном устройстве | +| `createTinkoffAppAuthIntent(callbackUrl: Uri): Intent` | Создает Intent для открытия приложения группы Тинькофф для прохождения авторизации. На вход принимает Uri для создания AppLink/DeepLink, по которому будет осуществлен переход после окончания процесса авторизации | +| `createTinkoffWebViewAuthIntent(callbackUrl: Uri): Intent` | Создает Intent для открытия `TinkoffWebViewAuthActivity` для прохождения авторизации в вебе. На вход принимает Uri для создания AppLink/DeepLink, по которому будет осуществлен переход после окончания процесса авторизации | +| `getTinkoffTokenPayload(uri: Uri): TinkoffCall` | Возвращает объект, который позволяет получить синхронно информацию о токене, которая придет к вам в `intent.data` после авторизации в Тинькофф | +| `getStatusCode(uri: Uri): TinkoffIdStatusCode?` | Позволяет получить статус выполнения авторизации из `intent.data` пришедшего к вам | +| `obtainTokenPayload(refreshToken: String): TinkoffCall` | Возвращает объект, который позволяет синхронно обновить токен по рефреш токену полученному ранее | +| `signOutByAccessToken(accessToken: String): TinkoffCall` | Возвращает объект, который позволяет синхронно разлогинить по accessToken | +| `signOutByRefreshToken(refreshToken: String): TinkoffCall` | Возвращает объект, который позволяет синхронно разлогинить по refreshToken | ### TinkoffCall`` diff --git a/app-demo/src/main/java/ru/tinkoff/core/app_demo_partner/PartnerActivity.kt b/app-demo/src/main/java/ru/tinkoff/core/app_demo_partner/PartnerActivity.kt index 8517aba..674f6c9 100644 --- a/app-demo/src/main/java/ru/tinkoff/core/app_demo_partner/PartnerActivity.kt +++ b/app-demo/src/main/java/ru/tinkoff/core/app_demo_partner/PartnerActivity.kt @@ -49,11 +49,7 @@ class PartnerActivity : AppCompatActivity() { val clickListener = View.OnClickListener { if (isDataCorrect()) { initTinkoffIdAuth() - val intent = if (tinkoffPartnerAuth.isTinkoffAppAuthAvailable()) { - tinkoffPartnerAuth.createTinkoffAppAuthIntent(callbackUrl) - } else { - tinkoffPartnerAuth.createTinkoffWebViewAuthIntent(callbackUrl) - } + val intent = tinkoffPartnerAuth.createTinkoffAuthIntent(callbackUrl) startActivity(intent) } } diff --git a/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/TinkoffIdAuth.kt b/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/TinkoffIdAuth.kt index 266f834..c89b8f3 100644 --- a/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/TinkoffIdAuth.kt +++ b/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/TinkoffIdAuth.kt @@ -46,7 +46,24 @@ public class TinkoffIdAuth( } /** - * Creates an intent to open Tinkoff App and later return authorization data. + * Creates an intent to open Tinkoff App or WebView Activity for authorization via Tinkoff web + * based on the results of the method [isTinkoffAppAuthAvailable()][isTinkoffAppAuthAvailable] + * and later return authorization data. + * + * @param callbackUrl AppLink/DeepLink that will be opened when authorization process finishes + * @return intent for authorization via Tinkoff + */ + @RequiresApi(Build.VERSION_CODES.M) + public fun createTinkoffAuthIntent(callbackUrl: Uri): Intent { + return if (isTinkoffAppAuthAvailable()) { + createTinkoffAppAuthIntent(callbackUrl) + } else { + createTinkoffWebViewAuthIntent(callbackUrl) + } + } + + /** + * Creates an intent to open Tinkoff App and later returns authorization data. * * @param callbackUrl AppLink/DeepLink that will be opened when authorization process finishes * @return implicit Intent to open Tinkoff App diff --git a/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/ui/webView/TinkoffWebViewAuthActivity.kt b/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/ui/webView/TinkoffWebViewAuthActivity.kt index 19eadc4..5e31e4b 100644 --- a/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/ui/webView/TinkoffWebViewAuthActivity.kt +++ b/tinkoff-id/src/main/java/ru/tinkoff/core/tinkoffId/ui/webView/TinkoffWebViewAuthActivity.kt @@ -104,6 +104,7 @@ internal class TinkoffWebViewAuthActivity : AppCompatActivity() { } private fun finish(intent: Intent) { + intent.setPackage(packageName) startActivity(intent) finish() }