Используя библиотеку expo-auth-session, я создаю вызов моего пула пользователей Cognito, который перенаправляется на сайт account.google.com, который после аутентификации перенаправляется обратно в Cognito, который затем перенаправляется обратно в приложение.
Этот процесс отлично работает на моем эмуляторе iPhone, но на моем эмуляторе Android происходит сбой.
Я могу успешно отобразить веб-представление в приложении в Android, ввести данные своей учетной записи, но после этого во входном окне появляется пустой экран. браузер приложения, и меня не перенаправляют обратно в мое приложение.
Поскольку все взято с выставки, я ожидаю, что оно будет работать, не затрагивая собственные файлы.
У меня нет идей, так как это работает для IPhone, я сомневаюсь, что это связано с кодом внешнего интерфейса или серверной части.
Я дважды, трижды и четырежды проверял, есть ли URI перенаправления правильный, и в app.json добавлена специфичная для Android схема и конфигурация хоста.
Ничего не изменилось.
Я не уверен, как устранить эту проблему, поскольку в бэкэнде все работает нормально. Пользователь аутентифицирован, функция пост-подтверждения запускается и выполняется, но во внешний интерфейс ничего не доходит. Наш прослушиватель, который ожидает изменения переменной ответа, никогда не срабатывает.
Мне интересно, связано ли это с какой-то собственной конфигурацией... безопасностью, сетью, настройками глубоких ссылок... Но этим всем должна управлять выставка, поскольку это выставочный проект и библиотека.
Я был бы очень признателен за любую помощь и/или идеи по этой теме. Заранее спасибо!
Некоторые коды:
App.json
Код: Выделить всё
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.fluentpal.frontend",
"intentFilters": [
{
"action": "VIEW",
"data": [
{"scheme": "fluentpal", "host": "oauth2_redirect"}
],
"category": ["BROWSABLE", "DEFAULT"]
}
]
},
Код: Выделить всё
const redirectUri = 'fluentpal://oauth2_redirect';
const discoveryDocument = {
authorizationEndpoint: `${userPoolUrl}/oauth2/authorize`,
tokenEndpoint: `${userPoolUrl}/oauth2/token`,
revocationEndpoint: `${userPoolUrl}/oauth2/revoke`,
};
const [request, response, promptAsync] = useAuthRequest(
{
clientId,
responseType: ResponseType.Code,
redirectUri,
usePKCE: true,
scopes: ['openid', 'profile', 'email', 'aws.cognito.signin.user.admin'],
extraParams: {
identity_provider: 'Google',
prompt: 'login',
}
},
discoveryDocument
);
Код: Выделить всё
useEffect(() => {
if (response) {
// Check if the response is of type error
if ('error' in response && response.error) {
Alert.alert(
'Authentication Error',
response.params.error_description || 'Something went wrong'
);
return;
}
if (response.type === 'success') {
exchangeTokens({
clientId,
code: response.params.code,
redirectUri,
extraParams: {
code_verifier: request?.codeVerifier,
},
});
}
}
}, [request, response]);
Подробнее здесь: https://stackoverflow.com/questions/787 ... on-in-reac