4

次の認証方法で認証すると、startWithGraphPathとstartForMeWithCompletionHandlerでcom.facebook.sdkエラー5が発生しますが、requestWithGraphPathでは発生しません。トークンを正常に取得し(didLoginで出力)、requestwithGraphPathで必要なものを取得していますが、他のメソッドで作業を行うことができません。誰かが同じ問題または類似の何かに遭遇したか、何か考えを持っているなら、あなたがそれを共有するならば、私は幸せです。

ありがとう

方法:

NSArray *permissions = [[NSArray alloc] initWithObjects: @"user_likes",@"offline_access",@"read_stream",@"publish_stream",nil];
[_facebook authorize:permissions];
4

2 に答える 2

10

startWithGraphPathおよびその他のstart*メソッドは、アクティブなセッションを取得していない可能性があります。これらのメソッドは、設定されているアクティブなセッションに依存しています。見る:

https://developers.facebook.com/docs/reference/ios/3.1/class/FBRequestConnection#startWithGraphPath%3AcompletionHandler%3A

「リクエストは、[FBSessionactiveSession]で表されるアクティブなセッションを使用します。」

したがって、次のようなことを行う必要があります。

[FBSession setActiveSession:session];

ここで、sessionは、以前に設定したFBSessionです。

于 2012-11-21T20:43:39.397 に答える
2

次の解決策は私のために働いた。ただし、永続的なアクセストークンを保存している場合は、ユーザーがアプリケーションのアクセス許可を削除していないことを確認する必要があります。そうしないと、エラーが発生します。そして、requestWithGraphPath-> "me/permissions"で確認できます。

アプリケーション初期化関数(例:didFinishLaunchingWithOptions /またはその間にfbsessiondelegateする必要があるFacebookオブジェクトを初期化する場所)

...    
NSArray* permissions = [[NSArray alloc] initWithObjects:@"user_likes",@"offline_access", nil];

        FBSession*oursession = [[FBSession alloc] initWithPermissions:permissions];
...

FBDidLogin関数:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

グラフAPIリクエスト関数の例:

NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
        NSString *key = [userDefaults stringForKey:@"FBAccessTokenKey"];

    FBRequest* ourcon = [[FBRequest alloc] initWithSession:oursession graphPath:@"me/likes" parameters:params HTTPMethod:@"GET"];

            [ourcon startWithCompletionHandler: ^(FBRequestConnection *connection, id<FBGraphUser> result, NSError *error){
                if(error)
                {
                    //NSLog(error.code);
                    return;
                }

                NSArray* collection = (NSArray*)[result data];
                NSLog(@"You have %d like", [collection count]);

                NSDictionary* name = [collection objectAtIndex:14];
                NSLog(@"Like Name: %@", [name objectForKey:@"name"]);
            }];
于 2012-11-23T12:57:30.063 に答える