Подтвердить что ты не робот

FbDidLogin не вызывается - iOS

Я пытаюсь реализовать facebook для моего приложения iOS для школьного проекта, но я столкнулся с некоторой проблемой, а именно, метод fbDidLogin не вызывается.

Я создал образец объекта под названием FBFetcher следующим образом:

    @interface FBFetcher : NSObject <FBDialogDelegate,FBSessionDelegate,FBRequestDelegate> {
    Facebook *facebook;
    FBFetcher *facebookFetcher; 
}
-(void)login; 
@property (retain) Facebook  *facebook;
@property (retain) FBFetcher *facebookFetcher; 
@end

В FBFetcher.m:

    @implementation FBFetcher 
@synthesize facebookFetcher,facebook;


-(void)login{
    facebook = [[Facebook alloc] initWithAppId:@"...."]; 
    NSArray *permissions =  [[NSArray arrayWithObjects: @"offline_access",@"user_about_me", nil] retain];
    [facebook authorize:permissions delegate:self];

}

-(void)fbDidLogin {
    NSLog(@"Erfolgreich eingeloggt....");
}

@end

В моем делегате приложения:

    -  (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

    return [[[controller facebookFetcher] facebook] handleOpenURL:url];
}

У меня есть отдельный контроллер представления с n действием, связанным с UIButton:

facebookFetcher = [[FBFetcher alloc] init];
[facebookFetcher login]; 

Я могу получить доступ к странице входа и авторизации, однако метод fbDidLogin никогда не будет вызван. Какие-либо предложения?

4b9b3361

Ответ 1

Метод никогда не вызывается, потому что когда вы авторизуете, вы делаете это в Safari. Чтобы позаботиться об этом, я думаю, что это ошибка из SDK от Facebook, откройте файл facebook.m и найдите следующую строку:

[self authorizeWithFBAppAuth:YES safariAuth:YES];

и измените его на

[self authorizeWithFBAppAuth:NO safariAuth:NO];

Таким образом, вы никогда не будете отправлены в Safari, но все будет сделано в диалоговом окне.

Просто проверьте его, и вы увидите, что метод fbDidLogin будет вызван.

Надеюсь, что это поможет

Ответ 2

Что насчет

- (void)fbDidNotLogin:(BOOL)cancelled

Вызывается ли это?

Ответ 3

Ищите эту функцию в Facebook.m. Здесь Facebook вызывает функцию fbDidLogin. Сначала убедитесь, что это вызвано, а затем отлаживайте его. Убедитесь, что вы правильно задали/определили fbDidLogin в своем делегате сессии (без параметров). Если неответчикToSelector не выполнит и никогда не вызовет вашу функцию делегата.

- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate
{
  self.accessToken = token;
  self.expirationDate = expirationDate;
  if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)])
  {
    [_sessionDelegate fbDidLogin];
  }
}