FB Singleton Войти - PullRequest
       13

FB Singleton Войти

1 голос
/ 05 января 2012

Я создаю синглтон для доступа ко всем методам Facebook и хочу обработать диалоговое окно «Вход» в этом синглтоне.

Я следовал учебному пособию по iOS SDK на Facebook, но он позволяет мне входить только в приложениизапуск, а не когда пользователь нажимает кнопку.

Какая альтернатива

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [self.facebook handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [self.facebook handleOpenURL:url];
}

Кажется, это проблема, мое приложение не переключается в браузер или приложение FB для входа,Когда я реализую тот же материал в AppDelegate, он работает, но сразу после запуска приложения.

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Я решил это так:

в AppDelegate:

-(void)connectToFacebook{
facebook = [[Facebook alloc] initWithAppId:kAPPID andDelegate:self];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];

}

if (![facebook isSessionValid]) {
    [facebook authorize:nil];
}
}

// For 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [facebook handleOpenURL:url]; 
}

- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}

И в синглтоне:

- (id)init {
self = [super init];
if (self != nil) {
    NBNAppDelegate *delegate = (NBNAppDelegate *)[[UIApplication sharedApplication] delegate];
    [delegate connectToFacebook];
    facebook =  delegate.facebook;        
}
return self;
}
1 голос
/ 08 мая 2012

Несмотря на то, что вы приняли свое собственное решение как работающее, существует простое решение исходного вопроса, которое завершается наличием кода входа в синглтоне.Единственное, что вам нужно добавить в делегат приложения, это openURL (и handleOpenURL для поддержки до 4.2).Вот пример:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{
    if ([[url scheme] isEqualToString:[NSString stringWithFormat:@"fb%@", facebookAppId]]) {        
        return [[FacebookSingleton sharedFacebook].facebook handleOpenURL:url]; 
    }
}

Все остальное, что вы можете поместить в свой синглтон (включая весь код входа в систему), и не нужно загромождать делегата вашего приложения.Затем ваш синглтон реализует код FBSessionDelegate.В этом примере кода предполагается, что вы объявляете свойство в своем синглтоне под названием «Facebook».Здесь находится объект Facebook, а не ваш делегат.

Примечание. Я проверяю схему перед пересылкой URL-адреса в Facebook.Это нужно только в том случае, если у вашего приложения есть другие схемы, которые оно принимает.

Если кому-то нужен одноэлементный код, оставьте сообщение, и я также смогу опубликовать его.

...