0

Facebook を ios 6 に正常に統合しましたが、アプリの動作がおかしいことに気付きました。Facebook を使用してログインしようとすると、すべて正常に動作しますが、資格情報を持つ他のユーザーがログインしようとすると、エラーが表示されます。私はそれに対する解決策が何であるかわかりません。

Facebook SDKのサンプルコードを参考にしています。ログインの場合、ログイン用のビュー フレームを設定するだけです。FBLoginView のプロトコル実装は次のとおりです。

- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView
{
BOOL canShareAnyhow = [FBNativeDialogs canPresentShareDialogWithSession:nil];
// first get the buttons set for login mode
self.postStatusBtn.enabled = YES;
self.shareWithFriendsBtn.enabled = YES;
self.viewFriends.enabled = YES;

}

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                        user:(id<FBGraphUser>)user
{
// here we use helper properties of FBGraphUser to dot-through to first_name and
// id properties of the json response from the server; alternatively we could use
// NSDictionary methods such as objectForKey to get values from the my json object

// setting the profileID property of the FBProfilePictureView instance
// causes the control to fetch and display the profile picture for the user


self.profilePic.profileID = user.id;
self.loggedInUser = user;
NSLog(@"%@",user);

}

- (void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView
{
BOOL canShareAnyhow = [FBNativeDialogs canPresentShareDialogWithSession:nil];

self.postStatusBtn.enabled = NO;
self.shareWithFriendsBtn.enabled = NO;
self.viewFriends.enabled = NO;
if (!self.viewFriends.enabled)
{
    self.viewFriends.titleLabel.textColor = [UIColor grayColor];
}

if(!self.shareWithFriendsBtn.enabled)
{
    self.shareWithFriendsBtn.titleLabel.textColor = [UIColor grayColor];
}

if (!self.postStatusBtn.enabled)
{
    self.postStatusBtn.titleLabel.textColor = [UIColor grayColor];
}

self.profilePic.profileID = nil;

self.loggedInUser = nil;
}

よろしくお願いします...!!

4

3 に答える 3

3

これで問題が解決すると思います:

  1. Facebook アカウントで Facebook アプリに移動します。
  2. [アプリを編集] をクリックします。
  3. [基本情報] タブに移動します。
  4. サンドボックス モード: [ 無効] にチェックを入れます
  5. 設定を保存します。

これはあなたのために働くでしょう。

于 2013-02-20T05:00:21.523 に答える
1

ユーザーがログアウトし、他の誰かがログインしたときにトークンをクリアしようとしましたか? ユーザーをログアウトしている場所、またはユーザーがログアウトボタンを押している場所に配置する必要がある1つのライナーに従ってください。

[FBSession.activeSession closeAndClearTokenInformation];

お役に立てれば。

于 2013-02-19T13:33:08.727 に答える
0

このコードを使用

-(IBAction) loginFrmFbBtnPressed:(id)sender
{
    if (FBSession.activeSession.isOpen)
    {
        [self getData];
    } else
    {
        [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session,
                                                                                                 FBSessionState status, NSError *error)
         {
             if (error)
             {
                 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                 [alert show];
             }
             else if (FB_ISSESSIONOPENWITHSTATE(status))
             {
                 [self getData];
             }
         }];
    }
}

-(void)getData
{
    if ([FBSession.activeSession.permissions indexOfObject:@"read_stream"] == NSNotFound)
    {
        NSArray *permissions = [[NSArray alloc] initWithObjects:
                                @"read_stream" , nil];
        [FBSession.activeSession reauthorizeWithReadPermissions:permissions completionHandler:^(FBSession *session, NSError *error) {
            if (!error) {
                [self request];
            }
        }];
    }
    else
    {
        [self request];
    }
}

-(void)request
{
    [FBRequestConnection startWithGraphPath:@"me" parameters:[NSDictionary dictionaryWithObject:@"picture,id,birthday,email,name,gender,username" forKey:@"fields"] HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
     {
         [self meRequestResult:result WithError:error];
     }];
}

- (void)meRequestResult:(id)result WithError:(NSError *)error
{
    if ([result isKindOfClass:[NSDictionary class]])
    {
        NSDictionary *dictionary;
        if([result objectForKey:@"data"])
            dictionary = (NSDictionary *)[(NSArray *)[result objectForKey:@"data"] objectAtIndex:0];
        else
            dictionary = (NSDictionary *)result;
        NSLog(@"dictionary : %@",dictionary);
        
        
    }
}
于 2013-02-19T09:38:45.467 に答える