Kivy Apk работает на P C, но не на телефоне - PullRequest
0 голосов
/ 19 февраля 2020

Мой 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

Если кто-нибудь может предложить мне любую помощь с любым из двух фрагментов кода, я был бы очень признателен

...