【发布时间】:2014-06-05 17:22:13
【问题描述】:
我正在开发两个不同的 iOS 应用:
- 他们都与 Facebook 共享内容。
- 它们都使用 iOS 6/7。
- 它们都具有社交框架
- 我在与 Facebook 共享时遇到了问题。
因此,尽管我尝试关注所有类型的帖子、文档等,但我做错了什么。
我专门关注了iOS 6 Facebook posting procedure ends up with "remote_app_id does not match stored id" error这个帖子,答案很好。
我认为我已经在 Facebook Developers 中创建了我的应用程序,因为我遇到了问题(错误的 iPhone ID 和错误 7),并且在帖子之后我提到了这些问题消失了。
当用户点击 Facebook 上的分享时,我会这样做:
- (void) loginWithFacebookWithReadPermissionsWithDelegate:(id<IfcRRSSDelegate>)_delegate
{
self.delegateFB = _delegate;
ACAccountStore *account = [[ACAccountStore alloc]init];
ACAccountType *accountType = [cuenta accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *facebookKey = MY_FACEBOOK_KEY;
NSMutableArray *permimssions = [[NSMutableArray alloc] init];
[permimssions addObject:@"email"];
self.fbPermission = [NSMutableDictionary dictionaryWithObjectsAndKeys:
facebookKey, ACFacebookAppIdKey,
ACFacebookAudienceFriends, ACFacebookAudienceKey,
permimssions, ACFacebookPermissionsKey,
nil];
[account requestAccessToAccountsWithType:accountType options:self.fbPermission completion:
^(BOOL granted, NSError *error) {
if(granted)
{
NSArray *accounts = [account accountsWithAccountType: accountType];
ACAccount *_facebookAccount = [accounts lastObject];
self.accountFB = _facebookAccount;
ACAccountCredential *credentials = [self.accountFB credential];
self.tokenFB = [credentials oauthToken];
}
else
{
// Show error
}
}];
}
如果这次登录顺利(事实上它总是顺利),我称之为:
- (void) loginWithFacebookWithWritePermissionsWithDelegate:(id<IfcRRSSDelegate>)_delegate
{
self.delegateFB = _delegate;
ACAccountStore *account = [[ACAccountStore alloc]init];
ACAccountType *accountType = [cuenta accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *facebookKey = MY_FACEBOOK_KEY;
NSMutableArray *permimssions = [[NSMutableArray alloc] init];
[permimssions addObject:@"publish_stream"];
[permimssions addObject:@"publish_actions"];
self.fbPermission = [NSMutableDictionary dictionaryWithObjectsAndKeys:
facebookKey, ACFacebookAppIdKey,
ACFacebookAudienceFriends, ACFacebookAudienceKey,
permimssions, ACFacebookPermissionsKey,
nil];
[account requestAccessToAccountsWithType:accountType options:self.fbPermission completion:
^(BOOL granted, NSError *error) {
NSLog(@">>>>ERROR: %@", error);
if(granted)
{
NSArray *accounts = [account accountsWithAccountType: accountType];
ACAccount *_facebookAccount = [accounts lastObject];
self.accountFB = _facebookAccount;
ACAccountCredential *credentials = [self.accountFB credential];
self.tokenFB = [credentials oauthToken];
}
else
{
// Show error
}
}];
}
第二次登录失败,我收到此错误:
ERROR: Error Domain=com.apple.accounts Code=7 "Facebook 服务器无法完成此访问请求:无效权限:publish_stream" UserInfo=0xc18d700 {NSLocalizedDescription=Facebook 服务器无法完成此访问请求:无效权限: 发布流}
无效的权限:publish_stream???我几乎找不到有关此错误的信息。
我尝试评论此权限并且只有 publish_action,但是当我尝试发布时,我收到了这个新错误:
{
code = 200;
message = "(#200) The user hasn't authorized the application to perform this action";
type = OAuthException;
}
如果第二次登录顺利,我会调用此代码发布(但由于第二次登录失败,它从未调用过):
- (void) postWithFacebookWithMessage:(NSString *)msg
{
if(self.accountFB)
{
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject: self.accountFB.credential.oauthToken forKey:@"access_token"];
[parameters setObject:msg forKey:@"message"];
NSURL *requestUR = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:requestURL
parameters:parameters];
request.account = self.accountFB;
[request performRequestWithHandler:^(NSData *data, NSHTTPURLResponse *response, NSError *error) {
if(!error)
{
NSDictionary *list = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if([list objectForKey:@"error"] != nil)
{
// Try to attempt Renew Credentials
}
else
{
// Everything works
}
dispatch_async(dispatch_get_main_queue(),^{});
}
else
{
// Try to attempt Renew Credentials
}
}];
}
}
如果这很重要,我已经在我的 Facebook 页面、我的活动、应用程序、此应用程序中进行了检查,并显示“此应用程序可以以你的名义发布:只有你”。
知道发生了什么吗?
亲切的问候!
编辑:对不起,我在解释错误时犯了一个重要错误,所以我编辑了帖子:失败的 facebook 调用是第二次登录,而不是帖子。
【问题讨论】:
标签: ios facebook social-framework