2

私は自分のアプリケーションで何かを共有するためにFacebookConnectを使用しています。そこで、「ログイン/Facebookで共有」という2つのボタンを使用してFacebookConnectAPIを実装したいと思いますUIACtionSheet

今、私はいくつかの質問があります:

UIActionSheet「Facebookで共有」「ログイン」というタイトルのボタンが2つあると仮定します。

ユーザーが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 

4

2 に答える 2

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];
}
于 2010-02-01T01:31:57.453 に答える
0

ユーザーがアプリケーションを使用した場合はYESを返し、それ以外の場合はNOを返す[sessionresume]を使用します。この方法を使用することにより、再度ログインする必要はありません。

于 2010-03-15T13:19:03.937 に答える