Мой kivy apk работает на P C, но когда я запускаю его на своем android телефоне, я получаю сообщение об ошибке:
Вам нужен личный ключ для подписи учетных данных. В настоящее время используется только содержит токен. см. http://google-cloud-python.readthedocs.io/en/latest/google-cloud-auth.html#setting -up-a-service-account для получения более подробной информации.
В моем apk я пытаюсь загрузить некоторые изображения из моего хранилища Firebase и отобразить их в APK с помощью AsyncImage.
Пока что из своих расследований я не нашел способ составить список своих хранилищ, используя то, что, как я полагаю, было аутентификацией Google oauth2, что и предложено для исправления моей ошибки выше. Но теперь, когда я могу перечислить сегменты, я не уверен, что делать, чтобы фактически получить подписанный URL для использования с виджетом Asyncimage. Это мой код, который выдал оригинальную ошибку.
import requests, json
import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage
import datetime
cred=credentials.Certificate("as.json")
app=firebase_admin.initialize_app(cred,{'storageBucket':'dravidian-university.appspot.com',
},name='storage')
bucket=storage.bucket(app=app)
result=requests.get('https://dravidian-university.firebaseio.com/'+'.json')
data=json.loads(result.content.decode())
for item in data['DuGallery']:
try:
blob=bucket.blob("DuGallery/"+item+".jpeg")
picsource=blob.generate_signed_url(datetime.timedelta(seconds=300),method='GET')
self.ids.du_grid_layout.add_widget(AsyncImage(source=picsource,size=Window.size,
keep_ratio= True,size_hint_y= None,allow_stretch=True))
except Exception as e:
print(e)
Теперь это мой код с аутентификацией oauth2
import google.oauth2.service_account as service_account
from google.auth import impersonated_credentials
from google.cloud import storage
result=requests.get('https://dravidian-university.firebaseio.com/'+'.json')
data=json.loads(result.content.decode())
target_scopes = ['https://www.googleapis.com/auth/devstorage.read_only','https://www.googleapis.com/auth/cloud-platform']
source_credentials = service_account.Credentials.from_service_account_file('assets/as.json',scopes=target_scopes)
target_credentials = impersonated_credentials.Credentials(source_credentials=source_credentials,
target_principal='du-827@dravidian-university.iam.gserviceaccount.com',
target_scopes=target_scopes,delegates=[],lifetime=500)
storage_client = storage.Client('dravidian-university.appspot.com',target_credentials)
data_bucket = storage_client.lookup_bucket('dravidian-university.appspot.com')
expires_at_ms = datetime.timedelta(minutes=30)
for item in data['DuGallery']:
try:
signed_blob_path = data_bucket.blob(item+'.jpeg')
signed_url = signed_blob_path.generate_signed_url(expires_at_ms,
credentials=target_credentials, version="v2")
self.ids.du_grid_layout.add_widget(AsyncImage(source=signed_url,size=Window.size,
keep_ratio= True,size_hint_y= None,allow_stretch=True))
except Exception as e:
print(e)
Этот второй бит кода дает мне ошибку:
File "C:\ProgramData\Anaconda3\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable
Если кто-нибудь может предложить мне любую помощь с любым из двух фрагментов кода, я был бы очень признателен