Facebook SDK для iOS, fbDidLogin никогда не вызывался в приложении с несколькими перьями - PullRequest
2 голосов
/ 01 августа 2011

это мой первый пост, так как я обычно просто захожу для исследования проблем, но этот я сам не могу понять.

По сути, моя проблема аналогична другим разработчикам, использующим SDK facebook для iOS, моя функция fbDidLogin никогда не вызывается даже после того, как я войду в систему и могу сделать мои сообщения успешными. Я посмотрел на другие темы, такие как fbDidLogin, который никогда не вызывался (facebook-ios-sdk) и fbDidLogin не вызывался , однако я не добился успеха. Мое приложение имеет основной вид, который загружается, и после нажатия кнопки он тянет во второй кончик и заменяет вид. У этого второго контроллера представления есть функциональность facebook, и я чувствую, что моя проблема может быть связана с Appdelegate с этим secondViewController. В примере приложения я заметил, что все настроено в appdelegate, но моя программа работает не так.

Я новичок в программировании на цель c, но до сих пор у меня все было хорошо с точки зрения создания некоторых приложений, просто этот SDK facebook убивает меня.

Я ценю любое направление, которое люди могут бросить в меня. Спасибо.

Вот часть кода:

- (void)login {
    facebook=[[Facebook alloc]initWithAppId:FB_APP_ID];
    NSLog(@"Inside login/post to wall function.");
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"mystuff",@"test",
                                       @"mystuff", @"link",
                                       @"mystuff", @"picture",
                                       mystuff, @"name",
                                       @"mystuff", @"caption",
                                       @"mystuff", @"description",
                                       @"mystuff",  @"message",
                                       nil];
    [facebook dialog:@"feed" andParams:params andDelegate:self];
}

/**
 * Invalidate the access token and clear the cookie.
 */
- (void)logout {
    [facebook logout:self];
}

/**
 * Called when the user has logged in successfully.
 */
-(void)fbDidLogin{
    NSLog(@"Inside fbDidLogin function.");
}

/**
 * Called when the user canceled the authorization dialog.
 */
-(void)fbDidNotLogin:(BOOL)cancelled {
    NSLog(@"User did not login.");
}

1 Ответ

4 голосов
/ 01 августа 2011

Проблема в том, что ваш делегат больше не существует после завершения процесса авторизации. Я хотел бы создать класс, который реализует FBSessionDelegate и сохранить его как свойство в вашем делегате приложения. Теперь, когда вы подключите делегата, установите его для этого свойства. Вы также можете подключить это с помощью конструктора интерфейса, если хотите. Просто установите делегат для того свойства, которое вы определили в делегате приложения.

Например, у вас может быть класс, который выполняет следующие действия (этот код покрывает 80% этого кода - надеюсь, он выведет вас на правильный путь):

typedef void (^completionHandler)(id);

@interface FacebookController : NSObject <FBSessionDelegate>
{
    completionHandler handler;
}

- (void)postToWallWithOptions:(NSDictionary *)options;
- (void)login:(completionHandler)handler;
- (void)fbDidLogin;

И реализация будет:

@implementation FacebookController

- (void)postToWallWithOptions:(NSDictionary *)options
{
    completionHandler handler = ^(id data)
        {
    // If you want this class to also be the delegate dialog, it will need to implement FBDialogDelegate
            [facebook dialog:@"feed"
                   andParams:options
                 andDelegate:self];
        };
[self login:handler];
}

- (void)login:(completionHandler)handler
{
completionHandler = handler;
// Be sure to add in your permissions here
[facebook authorize:yourPermissions 
               delegate:self];
}

- (void)fbDidLogin
{
// You could pass any object you needed to here
completionHandler(nil);
}

@end

Вам необходимо определить этот класс как свойство вашего делегата приложения:

@property (nonatomic, retain) FacebookController *fbController;

Теперь, когда вам нужен ваш FacebookController, вы просто можете сделать это:

FacebookController *fbController = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] fbController];
...