加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – 不在主视图控制器上时不调用fbDidLogin

发布时间:2020-12-14 17:41:23 所属栏目:百科 来源:网络整理
导读:我是iOS开发的新手.我遇到一个问题,在我的应用程序中集成facebook API时没有调用fbDidLogin.当我从主视图控制器(即app委托调用的那个)调用API时,一切都很完美,但在我的情况下,它在设置视图控制器下.我从字面上复制粘贴代码从主视图控制器(它工作的地方)到设
我是iOS开发的新手.我遇到一个问题,在我的应用程序中集成facebook API时没有调用fbDidLogin.当我从主视图控制器(即app委托调用的那个)调用API时,一切都很完美,但在我的情况下,它在设置视图控制器下.我从字面上复制粘贴代码从主视图控制器(它工作的地方)到设置视图控制器,它不起作用.

我确实将这个方法添加到app委托中,我理解这是大多数人的问题,但就我而言,我认为问题出在其他地方……任何帮助都会很棒.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[settingsvc facebook] handleOpenURL:url];

}

在app delegate标头中的位置:

@property (strong,nonatomic) Settings *settingsvc;

解决方法

几件事.

– 您只需要在整个应用程序的一个位置实现fbDidLogin.您没有在使用Facebook的每个视图控制器上实现它.

– 假设您按照Facebook的iOS文档中的“入门”步骤操作,您的Facebook对象将作为应用程序代理的属性.并且您的fbDidLogin方法仅在您的app委托中.这也应该是代码中声明Facebook变量的唯一位置.这意味着无论何时从代码中的任何其他位置访问Facebook,您都会执行以下操作:

ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate.facebook someMethod];

– 您的app委托中的handleOpenURL和openURL方法应该与Facebook的示例文档完全相同,而不是您发布的代码.

– 我个人更喜欢将Facebook对象从app委托移到单一帮助程序类中,但如果你是初学者,那么这可能比你需要的更高级.

更新信息回复评论:

-someMethod是你想要调用的任何Facebook方法(发布在墙上,验证,等等)

– 您应该将所有FBSessionDelegate方法放在您的app委托中

– 您需要在发布到Facebook的视图控制器上实现FBDialogDelegate

– 然后在您的视图控制器中,当您想要发布到用户的墙上时,执行以下操作:

- (void)postToWall {
    ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
    if (appDelegate.facebook.isSessionValid) {
       //we're logged in so call the post dialog
       [self doPost:nil];
    } else {
        //we're not logged in so call the login and then do the post when it's done
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doPost:) name:@"FBLoginComplete" object:nil]; 
        NSArray *permissions = [[NSArray alloc] initWithObjects: 
                                 @"offline_access",@"publish_stream",nil];
        [appDelegate.facebook authorize:permissions];
        [permissions release];

    }
}

-(void)doPost:(NSNotification *) notification {
    ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
    if (appDelegate.facebook.isSessionValid) {
        NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       something,@"app_id",something,@"link",@"picture",@"name",@"caption",@"description",nil];
        [appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];
        [params release];
    } 
    [[NSNotificationCenter defaultCenter] removeObserver:self];       
}

– 要使上述工作正常,您需要在登录完成(成功或失败)时发布NSNotificationCenter消息“FBLoginComplete”.

注意:我编写了上面的代码而没有编译或测试它所以它可能不完美(但它通常是:)

– 请注意:如果没有弹出dailog,你不能直接发布到用户的墙上.用户始终能够在帖子到达墙壁之前对其进行编辑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读