7

xmppframeworkを使用してFacebookチャットアプリケーションを開発しています。Facebookアクセストークンを取得しましたが、
このアクセスはxmppstreamオブジェクトによって認証されていません。

これが私のsetupStream方法です

- (void)setupStream
{
   XMPPStream *xmppStream=[[XMPPStream alloc] initWithFacebookAppId:@"443170809037796"];
}   

これが私の接続方法です

-(BOOL)connect1
{
    NSLog(@"connect1");
    NSError *error = nil;
    if(![xmppStream isDisconnected]) 
    {
        NSLog(@"isDisconnected");
        return YES;
    } 
    if (![xmppStream connect:&error])
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting fb" 
                                                            message:@"See console for error details."
                                                           delegate:nil
                                                  cancelButtonTitle:@"Ok" 
                                                  otherButtonTitles:nil];
        [alertView show];   
        return NO;
    }
    return YES;
}

これが私xmppStreamDidconnectの認証の委任方法です

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    isXmppConnected = YES;
    NSError *error = nil;
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [xmppStream authenticateWithFacebookAccessToken:[defaults             objectForKey:@"FBAccessTokenKey"] error:&error];        
}

このアプリを実行すると、休眠エラーが発生します

didNotAuthenticate

誰かが私の問題を解決できますか?

4

2 に答える 2

1

Facebookチャットは安全な接続を使用するため、接続方法は次のようになります

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

    isXmppConnected = YES;

    NSError *error = nil;
    //facebook connection
    if (_streamType == AAConnectStreamTypeFacebook) {

        if (![xmppStream isSecure])
        {

            NSError *error = nil;
            BOOL result = [xmppStream secureConnection:&error];

            if (result == NO)
            {
                DDLogError(@"%@: Error in xmpp STARTTLS: %@", THIS_FILE, error);

            }
        }
        else
        {

            NSError *error = nil;
            BOOL result = [xmppStream authenticateWithFacebookAccessToken:FBSession.activeSession.accessTokenData.accessToken error:&error];

            if (result == NO)
            {
                DDLogError(@"%@: Error in xmpp auth: %@", THIS_FILE, error);

            }
        }
    }
    else if (![[self xmppStream] authenticateWithPassword:password error:&error])
    {

        DDLogError(@"Error authenticating: %@", error);
    }
}
于 2013-04-13T18:54:06.937 に答える
0
http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/


 http://www.raywenderlich.com/1488/how-to-use-facebooks-new-graph-api-from-your-iphone-app

Graph API を使用してユーザーを認証する方法

OAuth 認証のしくみ Facebook に対してユーザーを認証するために、Graph API は新しい OAuth 2.0 プロトコルを使用します。心配はいりません。その名前は印象的ですが、その仕組みは実にシンプルです。Facebook 開発者ポータルを使用してアプリを作成すると、API キーと呼ばれるアプリの一意の ID が取得されます。次に、ユーザーを Facebook にログインさせたい場合は、Web ブラウザーで次の URL にアクセスします: https://graph.facebook.com/oauth/authorize ? client_id=[あなたの API キー]& redirect_uri= http://www.facebook.com/connect/login_success.html& scope=[必要な拡張アクセス許可]& type=user_agent& display=touch ユーザーには標準の Facebook ログイン ページが表示され、ユーザー名とパスワードを入力して、必要なアクセス許可を与えることができます。自分で redirect_uri を実装する必要はありません。上記のように、Facebook から事前に設定されたものを使用できます。プリセット コールバックはアクセス トークンを返します。これは、今後すべてのリクエストを行うために必要なものです。ユーザーがログインすると、Facebook はログインに関する情報の一部を Cookie に保存します。次回ログインしようとしたときに、Cookie の有効期限が切れていなければ、ログインはユーザーの介入なしで自動的に完了します!

于 2013-03-26T11:40:29.097 に答える