13

私は多くの例に従い、このアクセストークンエラーに関する多くの質問を調べましたが、なぜそれを取得しているのか、またはそれを修正する方法を見つけることができないようです。

3.1sdkの例のようにFacebookを初期化します。

 NSArray* permissions = [[NSArray alloc] initWithObjects:@"publish_stream", @"publish_actions", nil];
 self.fb = [[FBSession alloc] initWithPermissions:permissions];
 [self.fb openWithCompletionHandler:^(FBSession *session,
                                         FBSessionState status,
                                         NSError *error)
     {
         [self sessionStateChanged:session :status :error];
     }];

これは正常に機能し、ユーザーはSafariでアプリの権限を受け入れるように求められ、その後アプリに戻ります。ユーザーがアプリに戻ったとき、私のFBSessionStateはFBSessionStateOpenです。

私がこれを試すとき:

[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
                 {

                     [self showAlert:@"logged in?" result:result error:error];
                 }];

またはこれ:

NSMutableDictionary* fbPost = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"post from iOS", @"message", nil];
[FBRequestConnection startWithGraphPath:@"me/feed" parameters:fbPost HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
                                        {

                                            [self showAlert:@"message posted?" result:result error:error];
                                        }];

しかし、私は得る:

FBSDKLog: FBURLConnection <#1126>:

  Duration: 936 msec

Response Size: 0 kB

  MIME type: text/javascript

  Response:

{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}

FBSessionからアクセストークンを取得し、それをFacebookのアクセストークンデバッガーに入れました。これは、適切なトークンがあることを示しています。

App ID: <hidden>
Metadata: {"sso":"iphone-safari"}
User ID: <hidden>
Issued:  1351525817 (about an hour ago)
Expires: 1356709817 (in about 2 months)
Valid:  True
Origin: Mobile Web Faceweb
Scopes: create_note photo_upload publish_actions publish_stream share_item status_update video_upload

設定などの細かい部分が欠けているに違いありません。

よろしくお願いします!

4

5 に答える 5

29

ドキュメントによると、https://developers.facebook.com/docs/reference/ios/3.1/class/FBRequestConnection

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

これは、リクエストを処理する静的メソッドに適用されます。したがって、あなたがしたいことは、アクティブなセッションを確実に設定することです。以下をせよ:

[FBSession setActiveSession:self.fb];

最初の FBRequestConnection start* メソッドを呼び出す直前。

于 2012-10-31T21:47:56.777 に答える
11

しばらくして、FBSession.activeSession が nil ではないことに気付き、リクエストを送信する前に欠けていたのは次のとおりです。

    if (!FBSession.activeSession.isOpen) {
        [FBSession openActiveSessionWithAllowLoginUI: YES];
    }
于 2013-04-07T21:11:29.217 に答える
1

FBSDKGraphRequestログインする前に作成されたオブジェクトを使用しようとすると、SDK の v4 でこのエラーが発生しました。これを使用するFBSDKGraphRequest直前 (つまり、ログインした後) に作成するように変更すると、正常に動作しました。このクラスの初期化子は、リクエストの開始時に更新されないトークンを設定しているようです。

tokenStringログイン後、リクエストのプロパティを更新してみましたが、なぜかこれがreadonlyプロパティです。

于 2015-04-01T21:34:08.947 に答える
0

/* google および facebook func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: AnyObject) では非推奨注釈: 注釈)

    let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(
        application,

開く: url、sourceApplication: sourceApplication、注釈: 注釈) print(facebookDidHandle) return googleDidHandle || facebookDidHandle } */

だから私は、 func application(_ application: UIApplication, open url: URL, options: [String: AnyObject]) -> Bool {

    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: options) || GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}

xcode 8 ベータ 3、ios 10

于 2016-08-11T12:53:13.817 に答える
0

あなたもこれを試すことができます、私のために働きます

func application(_ application: UIApplication,
                      open url: URL, 
                       options: [String: AnyObject]) -> Bool
{
    let delegate = FBSDKApplicationDelegate.sharedInstance()

    return delegate.application(application, open: url, 
                                sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, 
                                       annotation: options["UIApplicationOpenURLOptionsAnnotationKey"])
}
于 2016-08-11T14:23:58.383 に答える