Closed goingreen closed 8 years ago
Методы VKSdkDelegate
могут вызываться и после того, как SFSafariViewController
скроется. Думаю, это зависит от интернета и мощности устройства (у меня на 4 айфоне они вызываются после скрытия, а на 6s Plus до, например)
Вы не пробовали реализовать авторизацию в отдельном вью контроллерe? Скажем, LoginViewController
. И, в случае успешной авторизации, заменить rootViewController
окна приложения на другой.
@implementation LoginViewController
- (void)vkSdkAccessAuthorizationFinishedWithResult:(VKAuthorizationResult *)result {
if (result.token) {
MainViewController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Main view controller"];
[[[[UIApplication sharedApplication] delegate] window] setRootViewController:controller];
} else if (result.error) {
[[[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"Access denied\n%@", result.error] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show];
}
}
Если вы часто обращаетесь к API Вконтакта из своего приложения, имеет смысл создать отдельный класс, и обращаться к API Вконтакта, а также авторизовываться, через этот класс, используя singleton pattern.
Методы делегата
вызываются до того, как SafariViewController, отвечающий за авторизацию скрывается. Это немного неудобно, так как после получения токена приходится ждать пока SafariViewController уйдет с экрана. Для себя решил проблему путем вызова
hideViews()
в самом начале методаprocessOpenURL
. Хотелось бы узнать какими последствиями грозит такое решение? В качестве альтернативного решения рассматривал бы вызовvkSdkDidDismissViewController
на UI-делегате, так как в данный момент он вызывается только при авторизации через WebView.