我正在开发一个包含facebook墙贴的iPhone应用程序。登录后,我通过以下代码发布到用户的墙上:
NSString *appIcon = [NSString stringWithString:@"http://a2.twimg.com/profile_images/416166235/apple-black_normal.png"];
NSString *appSiteUrl = [NSString stringWithString:@"http://www.apple.com"];
NSString *attachment= [NSString stringWithFormat:@"{\"caption\":\"%@ Likes in the iPhone App\",\"description\":\"\",\"media\":[{\"type\":\"image\",\"src\":\"%@\",\"href\":\"%@\"}]}",_facebookName,appIcon,appSiteUrl];
// [attachment stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSArray *obj = [NSArray arrayWithObjects:attachment,nil];
NSArray *keys = [NSArray arrayWithObjects:@"attachment",nil];
NSDictionary *params = [NSDictionary dictionaryWithObjects:obj forKeys:keys];
NSLog(@"atachment : %@",[params description]);
[[FBRequest requestWithDelegate:self] call:@"facebook.stream.publish" params:params];
这导致错误,说“用户未授权应用程序执行此操作”。
在用户的Facebook个人资料中,该应用仅具有访问用户基本信息的权限。所以我需要从用户那里获取“stream_publish”。
那么如何给予扩展权限Dialog(用于“stream_publish”的权限)??
任何帮助将不胜感激。
答案 0 :(得分:2)
我自己找到了问题的解决方案。
实际上问题的原因是应用程序doest有权“发布到墙”。 (publish_stream).Hence FB否认跟随错误。
“用户未授权此应用程序执行此操作”。
因此,当用户登录时,要求用户授予publish_stream的权限,
- (void)session:(FBSession*)session didLogin:(FBUID)uid {
FBPermissionDialog *permissions = [[FBPermissionDialog alloc]initWithSession:_session];
permissions.permission = [NSString stringWithString: @"publish_stream"];
[permissions show];
}
`
当用户允许“发布到墙”时,此对话框将不再出现。
答案 1 :(得分:0)
你应该有一小块代码,看起来类似于下面的代码。如果不是 - 在代码中搜索read_stream -
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
_permissions = [[NSArray arrayWithObjects:
@"read_stream", @"offline_access",nil] retain];
}
将@“stream_publish”添加到列表中,你应该好好去 -Jon
答案 2 :(得分:0)
上面的解决方案使用FBPermissionDialog,这对于在登录后更改权限很好,但是你最好只是要求初始登录的权限。这样你就不会两次打开外部浏览器了。
if (![facebook isSessionValid]) {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
nil];
[facebook authorize:permissions];
[permissions release];
}