mam zamiar założyć, że używasz GIDSignin z własnego serwera, który wymaga do obejmują serverclientID ze swoim GIDSignin. Zmusiłoby to moją aplikację do użycia youtube lub google plus do zalogowania się zamiast otwierania strony internetowej lub nawet przeglądarki. Zwróciłoby to GIDSigninError = -1 "potencjalnie możliwy do naprawienia błąd .." i nie pozwoliłoby użytkownikowi na zalogowanie się.
Sposób, w jaki to rozwiązałem, polegał na blokowaniu adresów URL z google lub youtube przed ich otwarciem przez nadpisanie adresów UIApplication Funkcja canOpenURL. Zrobiłem to przez instacji UIApplication i wdrażaniu canOpenURL tak:
@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]));
}
}
Zauważ, że zazwyczaj nie byłaby zerowa po argv ale to jest miejsce, gdzie można umieścić swoją podklasę UIApplication. W ten sposób można również użyć własnej podklasy AppDelegate.
Innym rozwiązaniem byłoby utworzenie kategorii na UIApplication, która przesłoni canOpenURL i użyje swizzling do wywołania oryginalnej implementacji w niestandardowym canOpenURL. To jest dobry artykuł na temat swizzling: https://blog.newrelic.com/2014/04/16/right-way-to-swizzle/
Muszę cię ostrzec, te dwa rozwiązania są hackami i musisz być naprawdę ostrożny w sprawie skutków ubocznych, jakie mogą mieć to na twoją aplikację. Nie jestem nawet pewien, czy jabłko byłoby w porządku z tym.
Powodzenia? Nie mogę tego uruchomić. – Chicken
Mam także do czynienia z tym samym problemem, jeśli masz tę odpowiedź, daj mi znać, jak to rozwiązać. –