iOS 6 Facebook 发布过程以“remote_app_id 与存储的 id 不匹配”错误结束
Posted
技术标签:
【中文标题】iOS 6 Facebook 发布过程以“remote_app_id 与存储的 id 不匹配”错误结束【英文标题】:iOS 6 Facebook posting procedure ends up with "remote_app_id does not match stored id" error 【发布时间】:2012-09-28 16:54:16 【问题描述】:我正在尝试执行一个简单的发布程序:
- (IBAction)directPostClick:(id)sender
self.statusLabel.text = @"Waiting for authorization...";
if (self.accountStore == nil)
self.accountStore = [[ACAccountStore alloc] init];
ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSArray * permissions = @[@"publish_stream", @"user_checkins", @"publish_checkins", @"user_likes", @"user_videos"];
NSDictionary * dict = @ACFacebookAppIdKey : @"My app id here", ACFacebookPermissionsKey : permissions, ACFacebookAudienceKey : ACFacebookAudienceOnlyMe;
[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error)
__block NSString * statusText = nil;
if (granted)
statusText = @"Logged in";
NSArray * accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
self.facebookAccount = [accounts lastObject];
NSLog(@"account is: %@", self.facebookAccount);
self.statusLabel.text = statusText;
[self postToFeed];
else
self.statusLabel.text = @"Login failed";
NSLog(@"error is: %@", error);
];
编辑: 问题是当我点击 alertView 的 OK 按钮(不允许也不起作用)时,什么也没有发生! - 这种行为现在改变了 ios 6 Facebook posting procedure ends up with "remote_app_id does not match stored id" 所以我得到了一个错误,而不是“什么都没发生” “Facebook 服务器无法完成此访问请求:remote_app_id 与存储的 id 不匹配”
所以,似乎警报视图的点击处理程序什么都不做,我的完成处理程序永远不会被调用。 我已经有类似的问题了:iOS 6 Social integration - go to settings issue 我认为这是同样的问题。你们怎么看? 附言 我在 MAC mini、OS X 10.8.1 上运行最新的 xcode 4.5 (4G182) 并使用 iPhone 6.0 模拟器。
添加:
应 Bjorn 的请求,添加 postToFeed
方法,尽管它从未被调用:
- (void)postToFeed
NSDictionary * parameters = @@"message" : @"Hello world!";
NSURL * feedUrl = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
SLRequest * request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedUrl parameters:parameters];
request.account = self.facebookAccount;
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
dispatch_async(dispatch_get_main_queue(), ^
self.statusLabel.text = @"Posted!";
);
];
【问题讨论】:
能否请您添加您的postToFeed
方法的代码?
是的,我会把它添加到底部的问题中
我不确定这是否为我解决了问题,但请确保您已在 Facebook 上正确设置了您的应用程序。将其与Facebook的集成方式设置为“Native iOS App”,填写Bundle ID(App Store ID暂时可以为0)并启用“Facebook登录”。此外,将高级选项卡中的“应用程序类型”设置为本机/桌面。您也可以将“客户端中的应用程序机密”设置为否。让我们知道这是否有助于/设置正确
我找不到“Native iOS app”复选框..其余设置正确
它在您的 Facebook 应用的“基本设置”中:“选择您的应用如何与 Facebook 集成”
【参考方案1】:
在使用 Accounts Framework 和 Facebook 集成时,我也遇到了一些困难。以下是我学到的知识以及我是如何使用它的。
1.确保您在 Facebook 上正确设置了您的应用 您需要将您的 App 与 Facebook 的集成方式设置为 Native iOS App,并在指定字段中输入您的 App 的 Bundle ID。 (编辑:请注意捆绑 ID 区分大小写)您现在可以将 iTunes ID 设置为 0。启用 Facebook 登录 并将高级设置选项卡中的 应用类型 设置为 Native/Desktop。 还将 App Secret in Client 设置为 No。
如果其中一个或多个选项设置不正确,您很可能会收到错误The Facebook server could not fulfill this access request: remote_app_id does not match stored id
。
(编辑:您还必须确保沙盒已禁用。)
2。首次安装 Facebook 应用
在 iOS(以及 Mac OS X)上首次通过本机 Facebook 集成安装应用程序时,您必须仅请求基本读取权限!此处不允许使用 email
、user_birthday
和 user_location
之类的其他内容。使用user_about_me
(根据 Facebook 文档也是基本读取权限)不起作用。如果您之前使用过 Facebook javascript SDK 或 Facebook php SDK,这会非常令人困惑,因为默认情况下它会要求您提供基本权限,而您无需执行任何操作。 Facebook 还更新了他们的文档,在 iOS 6 上的 how to use the new Facebook SDK 上提供了一个简短的分步指南。
3.请求其他权限
重要的是要知道,您可能不会同时要求读取和写入权限。这也是经验丰富的 Facebook SDK 开发人员可能会感到困惑的地方。请求read_stream
权限和publish_stream
权限将使请求失败,从而导致错误应用程序可能无法同时请求读取和写入权限。
由于 Facebook 并没有真正区分Permission Reference 中的读/写权限,因此您必须自己识别写权限。它们通常以manage_*
、publish_*
、create_*
为前缀或以*_management
为后缀。
Facebook 也不建议在获得基本权限后立即请求额外权限。 documentation 表示“您现在需要分别请求读取和发布权限(并按此顺序)。很可能,您将在应用程序启动和用户首次登录时请求读取权限以进行个性化。稍后,如果合适的话,您的应用程序可以在打算向 Facebook 发布数据时请求发布权限。[...] 分别请求这两种类型也大大提高了用户授予发布权限的机会,因为您的应用程序当时只会寻求它们它需要它们,最有可能是当用户有更强烈的意图时。”。
4.示例代码 以下示例代码应该适用于 iOS 和 Mac OS X:
ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// At first, we only ask for the basic read permission
NSArray * permissions = @[@"email"];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"My app id here", ACFacebookAppIdKey, permissions, ACFacebookPermissionsKey, ACFacebookAudienceOnlyMe, ACFacebookAudienceKey, nil];
[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error)
if (granted && error == nil)
/**
* The user granted us the basic read permission.
* Now we can ask for more permissions
**/
NSArray *readPermissions = @[@"read_stream", @"read_friendlists"];
[dict setObject:readPermissions forKey: ACFacebookPermissionsKey];
[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error)
if(granted && error == nil)
/**
* We now should have some read permission
* Now we may ask for write permissions or
* do something else.
**/
else
NSLog(@"error is: %@",[error description]);
];
else
NSLog(@"error is: %@",[error description]);
];
【讨论】:
在第 1 步中,请务必查看 developer.facebook.com/apps 中的高级选项卡,了解 App Type 和 App Secret。此外,Facebook 表示需要“几分钟”才能访问所有服务器,但当我使用 Facebook 3.1.1 SDK 看到这一点时,我猜大概需要 3000 万。 嗨,你能告诉我 self.facebookAccount 是哪种类型吗?我的意思是我必须声明什么? @Björn Kaiser 嗨..我按照你说的设置正确,但我仍然收到此错误“Facebook 服务器无法满足此访问请求:代理应用程序无法请求发布权限,而无需事先安装。” @Björn Kaiser 是的,现在解决了,我在权限中添加了 user_about_me 现在我更改为 user_location @Björn Kaiser 但是,它没有进入这个循环 if(granted ) NSArray *accountsArray = [accountStore accountsWithAccountType:accountType]; .请帮助我@Björn Kaiser【参考方案2】:如果您尝试从非开发者用户的应用程序访问 Facebook 帐户,请确保 sandbox mode
未激活。
【讨论】:
除了其他答案,这也有帮助 另外,测试账户也很棒。在这里制作一个脚本:gist.github.com/6971496以上是关于iOS 6 Facebook 发布过程以“remote_app_id 与存储的 id 不匹配”错误结束的主要内容,如果未能解决你的问题,请参考以下文章
为旧版 Xcode 集成 Facebook SDK 以支持 iOS 5 和 iOS 6
ios 6 - 在应用程序中发布到 Facebook 无法在设备上运行
使用 facebook SDK for ios 6 实现 Facebook 注销
使用 facebook connect 登录 IOS 应用程序时出现冲突错误
facebook-ios-sdk 是不是使用 iOS 6 Facebook 集成来支持登录而不打开本机 Facebook 应用程序?