ho intenzione di assumere che si sta utilizzando GIDSignin con il proprio server che richiede di includere un serverclientID con il GIDSignin. Ciò costringerebbe la mia app a provare a utilizzare youtube o google plus per accedere anziché aprire una webview o persino un browser. Ciò restituirebbe un GIDSigninError = -1 "un errore potenzialmente recuperabile .." e non consentirebbe all'utente di accedere.
Il modo in cui ho risolto questo era bloccando gli URL da google o youtube prima che venissero aperti sovrascrivendo l'applicazione di UIA. funzione canOpenURL. Ho fatto questo sottoclassi UIApplication e l'attuazione di canOpenURL come questo:
@interface MyApp : UIApplication
- (BOOL)canOpenURL:(NSURL *)url;
@end
@implementation MyApp
- (BOOL)canOpenURL:(NSURL *)url
{
if ([[url scheme] hasPrefix:@"com-google-gidconsent"] || [[url scheme] hasPrefix:@"com.google.gppconsent"]) {
return NO;
}
return [super canOpenURL:url];
}
@end
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, NSStringFromClass([MyApp class]), NSStringFromClass([AppDelegate class]));
}
}
Si noti che di solito ci sarebbe stato un pari a zero dopo argv ma questo è dove si mette il sottoclasse di UIApplication. Questo è anche il modo in cui è possibile utilizzare la propria sottoclasse di AppDelegate.
L'altra soluzione sarebbe quella di creare una categoria sull'applicazione UIA che sovrascrive canOpenURL e utilizzi lo swizzling per chiamare l'implementazione originale all'interno del canOpenURL personalizzato. Questo è un buon articolo su swizzling: https://blog.newrelic.com/2014/04/16/right-way-to-swizzle/
Devo avvertirti, però, queste due soluzioni sono hack e devi stare molto attento agli effetti collaterali che questo può avere sulla tua applicazione. Non sono nemmeno sicuro che Apple sarebbe d'accordo con questo.
fonte
2015-09-03 04:03:43
Qualche fortuna? Non riesco a farlo funzionare .. – Chicken
Anche io sto affrontando lo stesso problema, se hai la risposta per favore fammi sapere come risolverlo. –