Использую Flet для упаковки приложения Python.
Я следую своему носу и пытаюсь протестировать специальное приложение для Android, которое я просто устанавливаю на свой телефон. Я могу сгенерировать код авторизации, автоматически открыв URL-адрес аутентификации в браузере и Google, предоставив обычную информацию о согласии - затем пользователь может вставить его обратно в приложение, чтобы получить токен доступа, который использует клиент Oauth «Deskstop» в облаке Google. Я начал с этого, потому что оно также работает при запуске приложения flet на моем рабочем столе Windows.
Я понимаю, что мне следует использовать Android с соответствующим идентификатором клиента, что я пытаюсь сделать, но не могу, хоть убей, выяснить, как правильно вызвать поток OAuth. Google сообщает об ошибке 400,valid_request: «Детали запроса: redirect_uri=appname://callback»
»flowName=GeneralOAuthFlow»
Теперь я полностью заблудился, и ИИ водит меня кругами. Я пытаюсь следовать официальной документации, но они отсылают меня к Kotlin/Java, что меня смущает.
Когда я собираю свой APK, я добавляю общее имя пакета, соответствующее имени пакета идентификатора клиента в облаке Google и механизму глубоких ссылок:
"-deep-linking-scheme booktracker --deep-linking-host callback --org com.silallybren.appname"
с пониманием, что я Судя по тому, что я читаю, на Android он даже не нужен... Я также попробовал включить «Включить пользовательскую схему URI» в настройках клиента Google Cloud Android OAuth.
Модули Python:
Код: Выделить всё
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
Код: Выделить всё
"""Generate the OAuth URL"""
params = {
'client_id': get_client_id(),
'redirect_uri': get_redirect_uri(),
'response_type': 'code',
'scope': ' '.join(SCOPES),
'access_type': 'offline',
'prompt': 'consent',
}
return f"https://accounts.google.com/o/oauth2/auth?{urllib.parse.urlencode(params)}"
Код: Выделить всё
def on_route_change(e):
route = page.route
# Check if this is an OAuth callback
if route and '/callback' in route:
# Extract code from URL params (e.g., /callback?code=ABC123)
if '?' in route:
params = route.split('?')[1]
for param in params.split('&'):
if param.startswith('code='):
code = param[5:] # Remove 'code='
# URL decode the code
import urllib.parse
code = urllib.parse.unquote(code)
self._handle_oauth_callback(code)
return
page.on_route_change = on_route_change
Подробнее здесь: https://stackoverflow.com/questions/798 ... ation-flow
Мобильная версия