Попытка доступа к Google Диску с помощью oauth2client.tools для приложения iOS. (Среда Kivy / Python) Следующий код отлично работает для среды ОС Ma c,
- Для первого доступа он создает учетные данные. json при успешной аутентификации и
- Для 2-го или более позднего доступа он использует существующие учетные данные. json для обхода процедуры аутентификации
Однако, когда тот же код используется для приложения iOS, результат на iPhone для 1. меняется каждый раз, что вызывает у меня проблему.
иногда генерирует учетные данные. json успешно,
иногда Google два пошаговая проверка не дает ответа после всех процедур аутентификации в веб-браузере
- иногда X-Code внезапно отключает iPhone.
Во втором случае я получаю следующее сообщение об ошибке.
Ошибка завершения буфера команды GLDRendererMetal: Ошибка Domain = MTLCommandBufferErrorDomain Code = 7 "Недостаточно прав доступа (для отправки работы графического процессора из фон) (код IOAF 6) "UserInfo = {NSLocalizedDescription = Недостаточно прав (для отправки работы графического процессора из фона) (код 6 IOAF)}
Также во многих случаях я также получаю следующую ошибку.
XP C соединение прервано
Есть ли какие-либо рекомендации по этому вопросу?
Среда: - Python 3.7.2 (появилось второе сообщение при изменении формы с 3.7.1 на 3.7.2) - X-код 11.4.1 - iPhone 7 и iPhone Xs
Python код
# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import NumericProperty
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from apiclient import discovery
from httplib2 import Http
from oauth2client import client, file, tools
import os
sm = ScreenManager()
class MyLayoutAuthEntrance(BoxLayout):
pass
class GoogleAuthEntranceScreen(Screen):
# define path variables
app_dir = App().user_data_dir + "/oauth2test"
credentials_file_path = os.path.join(app_dir, "credentials.json")
clientsecret_file_path = "./credentials/client_secret.json"
if os.path.isdir(app_dir) == False:
os.mkdir(app_dir)
dialog_number = 0
def __init__(self, **kwargs):
super(GoogleAuthEntranceScreen, self).__init__(**kwargs)
self.gridlayout = None
self.gridlayout = MyLayoutAuthEntrance()
self.add_widget(self.gridlayout)
def button_yes_clicked(self, *args):
self.drive = self.authentication_process()
def button_no_clicked(self, *args):
exit(0)
def authentication_process(self):
# define API scope
# SCOPE = "https://www.googleapis.com/auth/drive"
SCOPE = [
"https://www.googleapis.com/auth/drive.metadata.readonly",
"https://www.googleapis.com/auth/drive.file",
"https://www.googleapis.com/auth/drive",
]
# define store
store = file.Storage(self.credentials_file_path)
credentials = store.get()
# get access token
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(
self.clientsecret_file_path,
scope=SCOPE,
redirect_uri="urn:ietf:wg:oauth:2.0:oob:auto",
)
credentials = tools.run_flow(flow, store)
if credentials != None:
self.gridlayout.authlabel.text = "Authentication successfully made!"
else:
self.gridlayout.authlabel.text = "Authentication failed!"
class oauth2testApp(App):
def build(self):
self.gae_screen = GoogleAuthEntranceScreen(name="gae_screen")
sm.add_widget(self.gae_screen)
sm.current = "gae_screen"
return sm
if __name__ == "__main__":
oauth2testApp().run()
код Киви
# -*- coding: utf-8 -*-
<GoogleAuthEntranceScreen>:
BoxLayout:
orientation: 'vertical'
padding: 10,40,10,40
spacing: 40
<MyLayoutAuthEntrance>:
authlabel: authlabel
orientation: 'vertical'
Label:
id:authlabel
text: 'Press "Yes" for authentication!'
BoxLayout:
orientation: 'horizontal'
Button:
text:'NO'
on_release: root.parent.button_no_clicked()
Button:
text: 'YES'
on_release: root.parent.button_yes_clicked()
Label:
text: ''