【发布时间】:2014-12-28 05:00:49
【问题描述】:
我正在尝试使用 iOS 中的 Facebook SDK 将消息发布到 Facebook 墙上。成功登录后,在发布到 Facebook 之前不会询问用户许可。我已经使用 iOS sdk 中的请求新发布权限方法向所有权限发出请求。当我点击发布消息时,任何人都知道如何显示用户权限屏幕?
下面是我使用的代码:
//Login:
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
if(!error) {
if(state == FBSessionStateOpen)
[self postWithText: @"message"
ImageName: @""
URL: @""
Caption: @""
Name: @""
andDescription: @""];
} else {
[FBSession.activeSession closeAndClearTokenInformation];
//show error message }
}];
-(void) postWithText: (NSString*) message
ImageName: (NSString*) image
URL: (NSString*) url
Caption: (NSString*) caption
Name: (NSString*) name
andDescription: (NSString*) description
{
NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
message, @"message",
nil];
if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound)
{
// No permissions found in session, ask for it
[FBSession.activeSession requestNewPublishPermissions: [NSArray arrayWithObject:@"publish_actions"]
defaultAudience: FBSessionDefaultAudienceFriends
completionHandler: ^(FBSession *session, NSError *error)
{
if (!error)
{
[self postToWall: params];
}
}];
}
else
{
[self postToWall: params];
}
}
-(void) postToWall: (NSMutableDictionary*) params
{
[FBRequestConnection startWithGraphPath:@"me/feed"
parameters:params
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error)
{
if (error)
{
//showing an alert for failure
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Post Failed"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}];
}
【问题讨论】:
-
请分享您的代码,这样会更容易找到问题...
-
嗨大卫,我也添加了代码!
-
能否请您也发布您的FB登录代码?除了没有被提示许可之外,它是否仍然张贴在您的墙上,或者您最终是否出现任何错误/异常?
-
嗨,大卫,感谢您的回复。我添加了登录代码。我正在使用创建 appid 的管理员帐户进行测试。对于此帐户,未经许可即可成功发布。对于其他帐户,无需请求许可。但是帖子也失败了,因为它需要 Facebook 的批准。
-
好的,我尝试了您的代码,它似乎可以工作...您可以尝试使用您的 Facebook id 登录,从应用程序设置(在 Facebook)中删除应用程序,从您的应用程序中注销,然后重新登录 - 一个干净的开始。我假设您只记录用户一次(因此在某处对
[[FBSession activeSession] isOpen]进行了测试。在 requestNewPublishPermissions 上放置断点并检查它是否被调用(也许它只是以您未捕获的错误结束)。您可能也想查看answer。请告诉我。