Facebook Connect iPhone вопросы - PullRequest
       11

Facebook Connect iPhone вопросы

2 голосов
/ 01 февраля 2010

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

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

Предполагается, что на 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 

Ответы [ 2 ]

10 голосов
/ 01 февраля 2010
#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 голосов
/ 15 марта 2010

Используйте [сеанс возобновления], который возвращает ДА, если пользователь использовал ваше приложение, в противном случае он возвращает НЕТ. При использовании этого метода нет необходимости снова входить в систему.

...