我一直在寻找解决这个问题的互联网。我理解它应该如何工作的基本思想,但我无法让实现工作,我找不到任何体面的例子来帮助我。到目前为止,我已经成功地使用iOS 6身份验证机制登录用户,但我无法弄清楚如何从那里向Jabber服务器验证用户身份。这就是我所拥有的:
用户登录后connect
被称为
-(void)connect
{
[self setupStream];
NSError *error = nil;
[_xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error];
NSLog(@"%@", error);
[NSString stringWithFormat:@"%@", self];
}
-(void)newSetupStream
{
_xmppStream = [[XMPPStream alloc] initWithFacebookAppId:@"611051652253156"];
#if !TARGET_IPHONE_SIMULATOR
{
xmppStream.enableBackgroundingOnSocket = YES;
}
#endif
_xmppReconnect = [[XMPPReconnect alloc] init];
_xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init];
_xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:_xmppRosterStorage];
_xmppRoster.autoFetchRoster = YES;
_xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
_xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
_xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:_xmppvCardStorage];
_xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:_xmppvCardTempModule];
_xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStorage sharedInstance];
_xmppCapabilities = [[XMPPCapabilities alloc] initWithCapabilitiesStorage:_xmppCapabilitiesStorage];
_xmppCapabilities.autoFetchHashedCapabilities = YES;
_xmppCapabilities.autoFetchNonHashedCapabilities = NO;
[_xmppReconnect activate:_xmppStream];
[_xmppRoster activate:_xmppStream];
[_xmppvCardTempModule activate:_xmppStream];
[_xmppvCardAvatarModule activate:_xmppStream];
[_xmppCapabilities activate:_xmppStream];
[_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
[_xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
}
无论我尝试什么,它总会返回相同的错误:Error Domain=XMPPStreamErrorDomain Code=4 "The server does not support X-FACEBOOK-PLATFORM authentication."
我对XMPP或Facebook API都不是很熟悉,所以我确信有一些简单的我不知道,但我一直在努力,并且无法取得任何进展。有什么想法吗?
答案 0 :(得分:1)
我找到了答案。万一其他人遇到同样的问题:我从来没有真正告诉我的XMPPStream连接。我之前尝试过所有的连接方法,但它们从未奏效。我现在意识到我只是没等他们完成连接。以下是我最终改变的内容:
NSError *error;
NSError *err;
[_xmppStream connectWithTimeout:10.00 error:&err];
[_xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error];
while (error)
{
sleep(1);
[_xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error];
}
我意识到这不是最优雅的解决方案,但它确实有效。
答案 1 :(得分:0)
确保使用chat.facebook.com或facebook.com作为主机名。
您还必须使用 xmpp_login 权限打开会话。
对我来说,上面的主机名工作100%正常