4

Facebook iOSSDK3.1を使用します。

Facebookアプリへの「接続」を許可しないことを選択すると、Facebookが「com.facebook.sdkerror2」をスローすることに固執します。アプリを再インストールした後でも、エラーが発生します。

再現する手順:

  1. Facebookとの接続を選択
  2. UIAlertViewポップアップするで「NotNow」を選択します

=>再度接続することはできません。

ユーザーが再度接続する唯一の方法は、Facebookアカウントを[設定]から削除して再度追加することです。

これはFacebookSDKのバグですか、それとも何かが足りませんか?

私は明らかに認証チュートリアルに従っており、接続を選択するときにすべてが正常に機能します(認証、投稿など)。

4

2 に答える 2

10

さて、ここで何が起こっているかを理解しました。アプリの承認を拒否すると、これはデバイスの Facebook アカウントに設定として保存されます ([設定] > [Facebook])。

[設定] に移動して問題のアプリを再度有効にすることで、接続を再試行できます。ユーザーにはあまり明確ではありませんが、このエラーをキャッチして、何らかの情報をユーザーに表示できます。

これは私が実装した方法です(Facebookのデフォルトのエラー処理と比較して):

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState)state
                      error:(NSError *)error {
....

if (error) {
        NSString *errorTitle = NSLocalizedString(@"Error", @"Facebook connect");
        NSString *errorMessage = [error localizedDescription];
        if (error.code == FBErrorLoginFailedOrCancelled) {
            errorTitle = NSLocalizedString(@"Facebook Login Failed", @"Facebook Connect");
            errorMessage = NSLocalizedString(@"Make sure you've allowed My App to use Facebook in Settings > Facebook.", @"Facebook connect");
        }

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorTitle
                                                            message:errorMessage
                                                           delegate:nil
                                                  cancelButtonTitle:NSLocalizedString(@"OK", @"Facebook Connect")
                                                  otherButtonTitles:nil];
        [alertView show];
    }

}

于 2012-09-27T13:10:36.103 に答える
1

アカウントが設定に追加されているときに Facebook フレームワークを使用して Facebook にログインしようとしたときに同じ問題が発生しましたが、次のコードを使用してこれを修正しました。

私が知っている限りでは「com.facebook.sdk error2.」iPhoneにアカウントが追加されている場合に発生します。

appdelegate.h

@property (強力、非アトミック) FBSession *mysession;

appdelegate.m にメソッドを追加するだけです

-(void)openSessionWithAllowLoginUI:(BOOL)allowLoginUI{

    if (!self.mysession.isOpen) {
        // create a fresh session object
        self.mysession = [[FBSession alloc] initWithPermissions:permissions];
    }

        [self.mysession openWithCompletionHandler:^(FBSession *session,
                                                    FBSessionState stat,
                                                    NSError *error){
            [self sessionStateChanged:session
                                state:stat
                                error:error];
         NSLog(@"Session Staet is = %u",stat);

            switch (stat){
                case FBSessionStateClosed:
                    break;
                case FBSessionStateOpen:{
                        NSString *strAccessToken1 = [mysession accessToken];
                        NSLog(@"AccessToken = %@",strAccessToken1);
                        NSString  *urlstring1 = [NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@",strAccessToken1];

                        NSURL *url1 = [NSURL URLWithString:[urlstring1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
                        NSString  *jsonRes = [NSString stringWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];
                        NSDictionary *facebookData = [jsonRes JSONValue];
                        NSLog(@"FBSessionStateOpen = %@",facebookData);

                        NSString *strFBID = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@",[facebookData objectForKey:@"id"]]];

                        NSString *strName = [[NSString alloc]initWithString:[facebookData objectForKey:@"name"]];

                        NSLog(@"FBSessionStateOpen = %@",strName);

                        NSString *ProfileImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture",strFBID];

                        NSLog(@"Profile image URL is = %@",ProfileImageURL);

                        NSString *strImageURl = [[NSString alloc]initWithString:ProfileImageURL];

                        strAccessToken = [[NSString alloc]initWithString:strAccessToken1];
                        strAppUserName = [[NSString alloc]initWithString:strName];
                        strFacebookUsername = [[NSString alloc]initWithString:strName];
                        strAppUserProfileImage = [[NSString alloc]initWithString:strImageURl];
                        strFacebookUserId = [[NSString alloc]initWithString:strFBID];

                    break;
                }
                default:
                    break;
            }
      }];
}

これは私のアクションメソッドで

-(IBAction)Facebook_Btn_Clicked:(id)sender{
        [appDelegate openSessionWithAllowLoginUI:YES];

      }
于 2012-10-25T12:30:45.493 に答える