• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 适用于 iOS 的 Facebook SDK,fbDidLogin 从未在多 Nib 应用程序中调用

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:53:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这是我第一次发帖,因为我通常只是来研究问题,但我自己无法弄清楚。

基本上,我的问题与使用 iOS 版 facebook sdk 的其他开发人员类似,即使我登录后我的 fbDidLogin 函数也不会被调用,并且可以使我的帖子成功提供。我在这里查看了其他线程,例如 fbDidLogin never called (facebook-ios-sdk)fbDidLogin not called ,但是我没有成功。我的应用程序有一个加载的主视图,按下按钮后它会拉入第二个 Nib 并替换 View 。第二个 View Controller 在那里有 facebook 功能,我觉得我的问题可能是从 Appdelegate 连接到那个 secondViewController。我在示例应用程序中注意到,所有内容都在 appdelegate 中设置,但这不是我的程序运行的方式。

我是 Objective c 编程的新手,但到目前为止,我在构建一些应用程序方面做得很好,只是这个 facebook sdk 让我很生气。

我很欣赏人们可以向我提出的任何方向。谢谢。

以下是部分代码:

- (void)login {
    facebook=[[Facebook alloc]initWithAppId:FB_APP_ID];
    NSLog(@"Inside login/post to wall function.");
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"mystuff",@"test",
                                       @"mystuff", @"link",
                                       @"mystuff", @"picture",
                                       mystuff, @"name",
                                       @"mystuff", @"caption",
                                       @"mystuff", @"description",
                                       @"mystuff",  @"message",
                                       nil];
    [facebook dialog"feed" andParams:params andDelegate:self];
}

/**
 * Invalidate the access token and clear the cookie.
 */
- (void)logout {
    [facebook logout:self];
}

/**
 * Called when the user has logged in successfully.
 */
-(void)fbDidLogin{
    NSLog(@"Inside fbDidLogin function.");
}

/**
 * Called when the user canceled the authorization dialog.
 */
-(void)fbDidNotLoginBOOL)cancelled {
    NSLog(@"User did not login.");
}



Best Answer-推荐答案


这里的问题是,一旦授权过程完成,您的代表就不再存在了。我将创建一个实现 FBSessionDelegate 的类,并将其作为您的应用程序委托(delegate)的属性。现在,当您连接代理时,将其设置为该属性。如果您愿意,您也可以使用界面构建器将其连接起来。只需将委托(delegate)设置为您在应用委托(delegate)上定义的属性。

例如,您可以有一个执行以下操作的类(此代码涵盖了其中的 80% - 希望它能让您走上正确的轨道):

typedef void (^completionHandler)(id);

@interface FacebookController : NSObject <FBSessionDelegate>
{
    completionHandler handler;
}

- (void)postToWallWithOptionsNSDictionary *)options;
- (void)logincompletionHandler)handler;
- (void)fbDidLogin;

而实现是:

@implementation FacebookController

- (void)postToWallWithOptionsNSDictionary *)options
{
    completionHandler handler = ^(id data)
        {
    // If you want this class to also be the delegate dialog, it will need to implement FBDialogDelegate
            [facebook dialog"feed"
                   andParamsptions
                 andDelegate:self];
        };
[self login:handler];
}

- (void)logincompletionHandler)handler
{
completionHandler = handler;
// Be sure to add in your permissions here
[facebook authorize:yourPermissions 
               delegate:self];
}

- (void)fbDidLogin
{
// You could pass any object you needed to here
completionHandler(nil);
}

@end

您需要将此类定义为应用程序委托(delegate)的属性:

@property (nonatomic, retain) FacebookController *fbController;

现在,当您需要 FacebookController 时,您只需这样做:

FacebookController *fbController = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] fbController];

关于ios - 适用于 iOS 的 Facebook SDK,fbDidLogin 从未在多 Nib 应用程序中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901313/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap