- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试执行一个简单的发布过程:
- (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 不匹配”
所以,似乎警报 View 的点击处理程序什么都不做,我的 completionHandler 从未被调用。我确实有类似的问题: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!";
});
}];
}
最佳答案
我在使用帐户框架和 Facebook 集成时也遇到了一些困难。以下是我学到的知识以及我是如何让它发挥作用的。
<强>1。确保您已在 Facebook 上正确设置您的应用
您需要将您的 App 与 Facebook 集成的方式设置为Native iOS App,并在指定字段中输入您的 App 的 Bundle ID。 (编辑:请注意捆绑 ID 区分大小写)您现在可以将 iTunes ID 设置为 0。启用 Facebook 登录并将高级设置选项卡中的应用类型设置为 native /桌面。
同时将 App Secret in Client 设置为No。
如果这些选项中的一个或多个未正确设置,您很可能会收到错误 The Facebook server could not fulfill this access request: remote_app_id does not match stored id
.
(编辑:您还必须确保禁用沙箱。)
<强>2。首次安装 Facebook App
首次通过 iOS(以及 Mac OS X)上的 native Facebook 集成安装应用程序时,您必须仅请求基本的读取权限!没有别的了 email
, user_birthday
和 user_location
在这里是允许的。使用 user_about_me
,根据 Facebook 文档,这也是基本的读取权限,但不起作用。如果您以前使用过 Facebook JavaScript SDK 或 Facebook PHP SDK,这会非常令人困惑,因为默认情况下它会请求基本权限,而您无需执行任何操作。 Facebook 还通过关于 how to use the new Facebook SDK 的简短分步指南更新了他们的文档。在 iOS 6 上。
<强>3。请求额外权限
重要的是要知道,您不能同时请求读取和写入权限。这也是经验丰富的 Facebook SDK 开发人员可能会感到困惑的地方。请求 read_stream
许可连同 publish_stream
permission 会使请求失败,导致错误 An app may not asks for read and write permissions at the same time。
因为 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]);
}
}];
关于iphone - iOS 6 Facebook 发布程序以 "remote_app_id does not match stored id"错误结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644229/
我正在使用 Facebook native 登录,我得到了 CLOSED_LOGIN_FAILED。 下面是我在DDMS中得到的LogCat, 02-22 15:16:22.939: E/ex
在我的应用程序中,用户必须通过 facebook 登录,但出现此错误, **my logcat error:** 02-14 18:00:01.821: WARN/fb4a:fb:OrcaServic
首先,我意识到之前有人问过这个问题,我已经阅读了这些帖子并在网上搜索并尝试了这些示例,但在运行我的应用程序时仍然出现此错误: 09-06 16:09:47.010: W/fb4a(:):BlueSer
我遇到了本文标题中所述的问题。我无法登录。 SessionState currentstate = session.getState(); 给我一个状态 CLOSED_LOGIN_FAILED。
我正在尝试实现 Facebook 登录,然后允许用户通过应用程序发布状态更新和分享详细信息到 Facebook。我(认为)用户无法成功登录 Facebook。以下是用户经历的过程: 用户点击登录按钮
这是我关于在 Facebook 上发帖的第三个问题。 尽管这可能是 Mac OS X Facebook login failed - no stored remote_app_id for app 的
我尝试在 Mac OS X 10.8 上使用新的 ACAccountStore 功能通过 Facebook 登录,但出现错误: Facebook 服务器无法满足此访问请求:没有存储应用的 remote
这是我关于在 Facebook 上发帖的第三个问题。 虽然这可能与 Mac OS X Facebook login failed - no stored remote_app_id for app 重
我正在尝试执行一个简单的发布过程: - (IBAction)directPostClick:(id)sender { self.statusLabel.text = @"Waiting for
我正在尝试构建一个使用 Facebook SDK for Android 3.0 的应用程序。但是当我试图打电话时 Session.openActiveSession 它只是简单地给我一个带有 CLO
您好,我使用了名为 HelloFacebookSample 的简单 Facebook 示例,但是当我尝试登录时,它不会登录(我的照片或名字没有出现),或者当我尝试点击帖子按钮时,它总是给我这样的错误
我是一名优秀的程序员,十分优秀!