我正在使用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
任何人都可以解决我的问题。
答案 0 :(得分: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);
}
}
答案 1 :(得分: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开发人员的门户网站制作应用程序,当您获得应用程序的唯一ID时,称为API密钥。 然后,当您想要将用户登录到Facebook时,您可以在Web浏览器中转到以下URL: https://graph.facebook.com/oauth/authorize? client_id = [您的API密钥]& REDIRECT_URI = http://www.facebook.com/connect/login_success.html& scope = [你想要的扩展权限]& 键入= USER_AGENT&安培; 显示触摸= 用户将看到标准的Facebook登录页面,他们可以输入用户名和密码,并提供所需的任何权限。 您不需要自己实现redirect_uri - 您可以使用Facebook中的预设,如上所示。预设回调将返回一个访问令牌,这是您将来所有请求所需要的。 当用户登录时,Facebook会在cookie中存储有关登录的一些信息。因此,下次尝试登录时,如果cookie未过期,登录将自动完成,无需用户干预!