Won*_*ton 1 facebook ios social-framework
我正在开发两个不同的iOS应用程序:
所以尽管我试图关注各种帖子,文档等,但我做错了.
我特意按照这个帖子iOS 6 Facebook发布程序最终以"remote_app_id与存储的id不匹配"错误,它有一个非常好的答案.
我想我已经在Facebook开发者中创建了我的应用程序,因为我遇到了问题(错误的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
}
}];
}
Run Code Online (Sandbox Code Playgroud)
如果这个登录顺利(实际上它总是顺利)我称之为:
- (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
}
}];
}
Run Code Online (Sandbox Code Playgroud)
第二次登录FAILS,我收到此错误:
错误:错误域= com.apple.accounts代码= 7"Facebook服务器无法满足此访问请求:无效权限:publish_stream"UserInfo = 0xc18d700 {NSLocalizedDescription = Facebook服务器无法满足此访问请求:无效权限:publish_stream}
无效的权限:publish_stream ??? 我几乎找不到有关此错误的信息.
我试图评论此权限并且只有publish_action,但是当我尝试发布时,我收到了这个新错误:
{
code = 200;
message = "(#200) The user hasn't authorized the application to perform this action";
type = OAuthException;
}
Run Code Online (Sandbox Code Playgroud)
如果第二次登录顺利,我会调用此代码发布(但由于第二次登录失败,因此从未调用过):
- (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
}
}];
}
}
Run Code Online (Sandbox Code Playgroud)
如果这很重要,我已经在我的Facebook页面,我的活动,应用程序,这个应用程序中检查了它"这个应用程序可以以您的名义发布:仅限您".
知道它发生了什么吗?
亲切的问候!
编辑:对不起,我犯了一个重要的错误解释错误,所以我编辑了帖子:失败的facebook调用是第二次登录,而不是帖子.
试试我在我的应用中使用的代码:
__block ACAccount * facebookAccount;
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
NSDictionary *emailReadPermisson = @{
ACFacebookAppIdKey : @"0123456789",
ACFacebookPermissionsKey : @[@"email"],
ACFacebookAudienceKey : ACFacebookAudienceEveryone,
};
NSDictionary *publishWritePermisson = @{
ACFacebookAppIdKey : @"0123456789",
ACFacebookPermissionsKey : @[@"publish_actions"],
ACFacebookAudienceKey : ACFacebookAudienceEveryone
};
ACAccountType *facebookAccountType = [accountStore
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
//Request for Read permission
[accountStore requestAccessToAccountsWithType:facebookAccountType options:emailReadPermisson completion:^(BOOL granted, NSError *error) {
if (granted) {
NSLog(@"Granted for read");
//Request for write permission
[accountStore requestAccessToAccountsWithType:facebookAccountType options:publishWritePermisson completion:^(BOOL granted, NSError *error) {
if (granted) {
NSLog(@"Granded for post");
NSArray *accounts = [accountStore
accountsWithAccountType:facebookAccountType];
facebookAccount = [accounts lastObject];
NSLog(@"Successfull access for account: %@", facebookAccount.username);
/* Do any things here */
}
else
{
NSLog(@"Access to Facebook is not granted");
// Fail gracefully...
NSLog(@"%@",error.description);
}
}];
}else{
/* Error */
}
}];
Run Code Online (Sandbox Code Playgroud)
这个样本在这篇文章中找到
如果您的帐户状态为"未获批准",请检查您的应用是否未被阻止Settings->Facebook.如果是 - 请让用户从设置中进行访问.
| 归档时间: |
|
| 查看次数: |
2854 次 |
| 最近记录: |