2010-01-31 1 views
2

Я использую Facebook Connect для обмена чем-то на моем приложении. Поэтому я хочу реализовать API Facebook Connect с помощью двух кнопок «Вход/доля на Facebook» через UIACtionSheet.Facebook Connect iPhone вопросы

Теперь у меня есть несколько вопросов:

Предполагая, что у меня есть 2 кнопки на UIActionSheet с названием «Поделиться на Facebook», «Вход».

Я хочу, чтобы пользователь вошел в систему на Facebook, мое имя кнопки входа в систему, чтобы перейти на «Выход». Я знаю, что нужно использовать эту функцию:

- (void)session:(FBSession*)session didLogin:(FBUID)uid { 
    //a code that change my login button title to LogOut 
} 

2- Я вошел в Facebook. Когда я собираюсь выйти из своего приложения и снова открыть приложение, я должен снова войти в систему! Как я мог предотвратить это?

3- Наконец, я хочу поделиться некоторым текстом от UIWebView до Facebook. Мой веб-сайт открывает «myWeb». Как я могу подключить Facebook Connect с UIWebView, чтобы поделиться им?

Должен ли я использовать

-(void)publishFeed:(id)target 

?

ответ

0

Используйте [сеансовое резюме], которое возвращает YES, если пользователь использовал ваше приложение, в противном случае оно возвращает NO. С помощью этого mehhod вам не нужно снова вводить логин.

10
#pragma mark FBDialog delegate methods 
- (void)dialogDidSucceed:(FBDialog *)dialog { 
    if ([dialog isMemberOfClass:[FBLoginDialog class]]) { 
     NSLog(@"[FBLoginDialog::dialogDidSucceed] just did succeed"); 
    } else if ([dialog isMemberOfClass:[FBPermissionDialog class]]) { 
     NSLog(@"[FBPermissionDialog::dialogDidSucceed] update user status"); 
     [self facebookUpdateUserStatus]; 
    } 
} 

- (void)dialogDidCancel:(FBDialog *)dialog {  
} 

- (void)dialog:(FBDialog *)dialog didFailWithError:(NSError *)error { 
    NSLog(@"dialog:%@ didFailWithError:%@", dialog, error); 
} 

#pragma mark FBSession delegate methods 
- (void)session:(FBSession *)session didLogin:(FBUID)uid { 
    NSLog(@"User with id %lld logged in.", uid); 
    [self facebookCheckForPermission]; 
} 

- (void)request:(FBRequest*)request didReceiveResponse:(NSURLResponse*)response { 
    NSLog(@"did r response"); 
} 

- (void)request:(FBRequest*)request didLoad:(id)result { 
    if ([@"facebook.Users.hasAppPermission" isEqualToString: request.method]) { 
     if ([@"1" isEqualToString: result]) { 
      // post comment 
      NSLog(@"[Users.hasAppPermission::dialogDidSucceed] succeed, update status"); 
      [self facebookUpdateUserStatus]; 
     } else { 
      // show dialog 
      NSLog(@"[Users.hasAppPermission::dialogDidSucceed] fail, show dialog");   
      FBPermissionDialog* dialog = [[[FBPermissionDialog alloc] init] autorelease]; 
      dialog.delegate = self; 
      dialog.permission = @"status_update"; 
      [dialog show];  
     } 
    } else if ([@"facebook.Users.setStatus" isEqualToString: request.method]) { 
     if ([@"1" isEqualToString: result]) { 
      NSLog(@"facebook update did succeed"); 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Facebook" 
                  message: @"L'article a bien été publié sur votre profil" 
                  delegate: nil 
                cancelButtonTitle: @"OK" 
                otherButtonTitles: nil]; 
      [alert show]; 
      [alert release];    
     } else { 
      NSLog(@"facebook update did fail"); 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Facebook" 
                 // Slava, change text here 
                  message: @"Update did fail" 
                  delegate: nil 
                cancelButtonTitle: @"OK" 
                otherButtonTitles: nil]; 
      [alert show]; 
      [alert release];    
     } 
    } 
} 

- (void)request:(FBRequest*)request didFailWithError:(NSError*)error { 
    NSLog(@"did fail: %@", [error localizedDescription]); 
} 

#pragma mark FBSession helper functions 
- (FBSession *)fbSessionWithDelegate:(id)theDelegate { 
    if (nil != [FBSession session]) { 
     return [[FBSession session] retain]; // fuckup this leak =) 
    } 

    FBSession *session = [FBSession sessionForApplication: kFBAPIKeyEncoded 
                secret: kFBAPISecretEncoded 
               delegate: theDelegate]; 
    return session; 
} 

- (void) facebookCheckForPermission { 
    NSLog(@"[facebookCheckForPermission] make a call"); 
    NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys: @"status_update", @"ext_perm", nil]; 
    // [[FBRequest requestWithDelegate: self] call: @"facebook.Users.hasAppPermission" params: d];  
    FBSession *fbSession = [self fbSessionWithDelegate: self]; 
    [[FBRequest requestWithSession: fbSession delegate: self] call: @"facebook.Users.hasAppPermission" params: d]; 
} 

- (void) facebookUpdateUserStatus { 
    NSLog(@"[facebookUpdateUserStatus] updating status"); 
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat: @"Je te recommande cet article: %@", postURL], 
          @"status", @"true", @"status_includes_verb", nil]; 
    FBSession *fbSession = [self fbSessionWithDelegate: self]; 
    updateRequest = [FBRequest requestWithSession: fbSession delegate: self]; 
    [updateRequest call: @"facebook.Users.setStatus" params: params]; 
} 
+0

WOOOW спасибо ..mexcuse, можете ли вы объяснить больше? : | я не знаю, что происходит! – Momi

+0

if ([@ "facebook.Users.hasAppPermission" isEqualToString: request.method]) { действительно должен быть: if ([@ "facebook.users.hasAppPermission" isEqualToString: request.method]) { Обратите внимание на строчные буквы. – ABeanSits

+0

Я собираюсь использовать это решение на своем iPhone-решении. Спасибо! – VansFannel