почему фбдидлогин не позвонил? - PullRequest
0 голосов
/ 16 августа 2011
- (id)init {
if (self == [super init]) {
    facebook = [[Facebook alloc] initWithAppId:kAppId];

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

    if (![facebook isSessionValid]) {
        permissions =  [[NSArray arrayWithObjects:
                         @"read_stream", @"user_birthday", 
                         @"publish_stream", nil] retain];
        [facebook authorize:permissions delegate:self];
    }

    [self login];
}
return self;

}

- (void)login {
if (![_session isConnected]) {
    [self postToWall];  
}


if (![facebook isSessionValid]) {
   [facebook authorize:permissions delegate:self];
}
}

- (void)fbdidLogin {
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"];

// User has logged in to Facebook, now get their userId from Facebook
[facebook requestWithGraphPath:@"me" andDelegate:self];
}

-(void)postToWall
{
SBJSON *jsonWriter = [[SBJSON new] autorelease];

NSDictionary *actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       @"Always Running",@"text",@"http://itsti.me/",@"href", nil], nil];

NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks];
NSDictionary *attachment = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"Your Happiness!", @"name",
                            @"asda", @"caption",
                            @"asdf", @"description",
                            nil];
NSString *attachmentStr = [jsonWriter stringWithObject:attachment];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"Share on Facebook",  @"user_message_prompt",
                               actionLinksStr, @"action_links",
                               attachmentStr, @"attachment",
                               nil];


[facebook dialog:@"stream.publish" andParams:params andDelegate:self];

}

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

return [facebook handleOpenURL:url]; 
}

Это мои методы вызова диалоговых окон facebook. Но каждый раз, когда я щелкаю, чтобы забить за публикацию, сначала появляется окно разрешения. Мне нужно дать разрешение после этого, появляется диалоговое окно публикации. Я хочу датьразрешений, и я хочу, чтобы это сохранилось; после сохранения я больше не хочу видеть окно разрешений. Как я могу это сделать? Что не так с моим кодом?

edit: мой токен доступа идата истечения срока действия равна нулю, думаю, из-за этого.

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Несколько вещей, которые нужно проверить, вы называете метод обработки входа методом "fbdidLogin" вместо fbDidLogin. Это чувствительно к регистру.

Убедитесь, что в заголовочном файле вашего контроллера представления вы добавили FBSessionDelegate в качестве одного из поддерживаемых вами протоколов. Это может быть причиной, по которой fbDidLogin не вызывается. Вы всегда можете добавить NSLog, чтобы убедиться, что метод fbDidLogin достигнут.

0 голосов
/ 16 августа 2011

Вам необходимо реализовать функцию единого входа Facebook.

http://developers.facebook.com/docs/guides/mobile/#ios

Эта ссылка содержит пошаговое руководство по внедрению единого входа, если вы внимательно следите заПриложение будет запрашивать разрешение один раз, затем оно никогда не будет запрашивать разрешение снова (до тех пор, пока пользователь не удалит ваше приложение)

Обратите внимание, что вам нужно будет зайти на www.facebook.com и использовать «Инструменты разработчика», чтобысоздайте новое приложение Facebook, вы будете администратором приложения и у вас будет свой AppID, он вам тоже понадобится.

...