3

Facebook チャットを実装するアプリケーションを作成しようとしています。私の知る限り、すべての XMPP を正しくセットアップしましたが、動作させることができません。

ユーザーがログインし、(経由でFBSession) Facebook に認証された後、チャット サービスに接続しようとしました。XMPP の出番は次のとおりです。

-(void)connect
{
    [self setupStream];
    NSError *err;

    [self.xmppStream connectWithTimeout:10.00 error:&err];
}

-(void)setupStream
{
    _xmppStream = [[XMPPStream alloc] initWithFacebookAppId:FACEBOOK_APP_ID];
    [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
}

- (void)xmppStreamDidConnect:(XMPPStream *)sender {
    NSError *error;
    NSError *err;
    [self.xmppStream secureConnection:&err];
    bool authed = [self.xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error];
    NSLog(@"%@", err);
    NSLog(@"%@", [self.xmppStream authenticationDate]);
    NSLog(@"%d, %@", authed, error);
}

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {
    NSLog(@"did authenticate");
    [self goOnline];
}

上記を実行すると、すべてうまくいくように見えます:xmppStreamDidConnectは少し待ってから呼び出され、authed常に YES を返し、そのエラーは常にnullです。

ただし、エラー Domain=XMPPStreamErrorDomain Code=1 "ストリームが接続されるまでお待ちください"secureConnectionが返されます。UserInfo=0xb23dc30 {NSLocalizedDescription=ストリームが接続されるまでお待ちください。}authenticationDate常にnull同様です。また、 を含め、他のデリゲート メソッドが呼び出されることはありませんxmppStreamDidAuthenticate。私は何を間違っていますか?

4

1 に答える 1

3

私はついに私の答えを見つけました!! 他の誰かが私と同じ問題に遭遇した場合に備えて、ここにあります:

オブジェクトの呼び出しopenActiveSessionWithReadPermissions:allowLoginUI:completionHandler:FBSession実際には Facebook サーバーと通信しないか、認証を試行しない場合、以前の authenticationToken をロードするだけです。私の場合、このトークンは無効になっていましたが、それに気付かず、何もわかりませんでした。トークンをログに記録し、それを Facebook のAccess Token Debuggerに入れて、最終的にそれを理解しました。トークンが有効かどうかを確認するには、呼び出し[FBSession renewSystemCredentials:]て結果を待つ必要があります。closeAndClearTokenInformation次に、新しいトークンを作成する前に手動で行う必要があるかどうかを判断できます。

于 2013-06-23T11:26:04.847 に答える