Поскольку этот поток немного разветвился в общем обсуждении текущих реализаций с плавающей запятой, я бы добавил, что есть проекты по исправлению их проблем.
Взгляните на https: // posithub.org/, который демонстрирует тип номера, называемый posit (и его предшественник unum), который обещает предложить лучшую точность с меньшим количеством бит. Если мое понимание верное, оно также фиксирует проблемы в вопросе. Весьма интересный проект, человек, стоящий за ним, является математиком Dr. Джон Густафсон . Все это с открытым исходным кодом, с множеством реализаций в C / C ++, Python, Julia и C # ( https://hastlayer.com/arithmetics ).
В AppDelegate вам нужно добавить реализацию
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
Google отправляет обратно информацию по URL-адресу, вышеперечисленный метод отображает эту информацию и отправляет обратно в приложение.
Если вы интегрировали библиотеку CleverTap CleverTap.autoIntegrate()
в своем делете, приложение не перенаправляет пользователя обратно в приложение. Добавление событий CleverTap вручную решит эту проблему. Если вы все сделали правильно.
Я, наконец, исправил это после работы дня. @ayman Ibrahim был в основном, верно, но я думаю, что ответ немного шире. Различные версии Swift / Objective-C и SDK Google вызывают разные версии метода canOpenURL в AppDelegate. Я не на 100% уверен в этом и буду благодарен за подтверждение или исправление. Вот версия того метода, который работал для меня. Я использую SDK Google версии 4.0, нацеленный на iOS 9.1, и используя Swift 3.0:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
let checkFB = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
let checkGoogle = GIDSignIn.sharedInstance().handle(url as URL!,sourceApplication: sourceApplication,annotation: annotation)
return checkGoogle || checkFB
}
Я также использую FBSDK, поэтому игнорируем эту строку.
Я нашел для него еще один ответ. В моем случае в AppDelegate я реализовал 2 метода делегирования
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
и
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
. Первый - это метод делегата и больше не должен реализовываться, он был заменен на второй метод. Но каким-то образом я все еще использую оба и просто добавляю
return [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
во второй, а затем как-то снова, он просто обращается к первому методу, а затем больше не переходит к моему приложению.
Поэтому я хочу опубликовать свое дело для кого-то, кто может получить эту ошибку, мне потребовалось слишком много времени, чтобы узнать