解析 Facebook Dialog Delegate 方法未被调用

Posted

技术标签:

【中文标题】解析 Facebook Dialog Delegate 方法未被调用【英文标题】:Parse Facebook Dialog Delegate methods not being called 【发布时间】:2013-01-30 18:32:30 【问题描述】:

我正在使用 Parse SDK 在我的应用程序中实现 Facebook apprequests 对话框。出于所有意图和目的,它只是包装了 Facebook SDK,在 Facebook 方法前加上 PF_

我使用这段代码来准备和引发对话框:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"I just challenged you to a game!"], @"message",
 [friendIds componentsJoinedByString:@"," ], @"to",
 nil];

PF_FBSession *session = [PFFacebookUtils session];
PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:nil];

facebook.accessToken = session.accessToken;
facebook.expirationDate = session.expirationDate;

[facebook dialog:@"apprequests" andParams:params andDelegate:self];

这很好,我得到了对话框,我可以邀请朋友玩这个应用程序。

问题是委托方法没有被调用,即使我将视图控制器设置为PF_FBDialogDelegate

@interface ChallengeFriendsViewController : UIViewController <UITableViewDelegate, PF_FBDialogDelegate> 
    NSArray *facebookFriends;
    NSMutableArray *selectedFriends;

这些是我正在谈论的一些委托方法:

- (void)dialog:(PF_FBDialog *)dialog didFailWithError:(NSError *)error 
    NSLog(@"Error in Dialog: %@", error);


- (void)dialogDidNotCompleteWithUrl:(NSURL *)url 
    NSLog(@"Failure on Facebook server side");


- (void)dialogCompleteWithUrl:(NSURL *)url 
    NSLog(@"Did complete with URL");
    [self.navigationController popViewControllerAnimated:YES];
    [MBProgressHUD hideAllHUDsForView:self.view animated:YES];


- (void)dialogDidNotComplete:(PF_FBDialog *)dialog 
    NSLog(@"Cancelled");
    [MBProgressHUD hideAllHUDsForView:self.view animated:YES];

如果不调用这些方法,我真的无法以直观的方式处理共享。我很困惑为什么不叫他们,觉得我已经尝试了一切。任何指向我哪里出错的指针?

【问题讨论】:

您是否检查过控件是否正在返回应用程序?通过应用程序委托中的函数 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 还要检查分享到facebook是否调用了委托方法,让我知道结果。 只需将消息放入参数中,删除好友 ID,现在检查,您会看到正在打开一个添加好友的对话框。对话框关闭后,控件必须返回给您的应用程序,如我所说之前 【参考方案1】:

在你的代码中

PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:nil];

由于您设置了一个 nil 委托,我希望永远不会调用委托方法,正如您所描述的那样。

你能把这个改成

PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:self];

这是假设您将委托方法放在同一个类中。

【讨论】:

嗨,谢谢你,但我之前已经试过了。你是对的,它应该用一个委托进行实例化,但该委托可能应该是 Parse appDelegate 而不是 self,以便调用 handleURL 回调之类的方法。 顺便说一句,我奖励了你的帮助,因为它确实帮助我找到了最终的答案。【参考方案2】:

我终于通过使用PFFacebookUtils 提供的facebook 实例解决了这个问题。这已被弃用,但似乎是目前使其调用正确委托方法的唯一方法。

替换:

PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:nil];

与:

PF_Facebook *facebook = [PFFacebookUtils facebook];

感谢 JP 和 Aromal 的意见。

【讨论】:

我很困惑,您能否澄清我的建议是否失败? 您如何避免这种方法似乎需要用户登录两次这一事实?

以上是关于解析 Facebook Dialog Delegate 方法未被调用的主要内容,如果未能解决你的问题,请参考以下文章

Cuadro对话Facebook

ios swift facebook登录 fb_mobile_login_native_app_switch_dialog_result 错误

Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析

Facebook - 添加页面选项卡

通过 Xamarin.Facebook.Android sdk 登录 Facebook

Facebook Oauth CORS 错误