2

我在这里遵循了我的原生 iOS 应用程序的登录说明https://developers.facebook.com/docs/mobile/ios/build/

我在应用程序中的 AppDelegate 中拥有 Facebook 的所有内容:didFinishLaunchingWithOptions:

facebook = [[Facebook alloc] initWithAppId:@"xyzabc" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}


if (![facebook isSessionValid]) {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"publish_stream", 
                            nil];
    [facebook authorize:permissions];

}

问题是我的应用程序打开了,我要求人们登录到 Facebook 才能使用我的应用程序中的功能。苹果拒绝了我说 Facebook 功能应该是可选的而不是强制的(在拒绝原因 17.2 下列出)。

我只是想知道我是否可以将大部分内容保留在应用程序委托中,但是将

    if (![facebook isSessionValid]) {
        NSArray *permissions = [[NSArray alloc] initWithObjects:
                                @"publish_stream", 
                                nil];
        [facebook authorize:permissions];
}

其他地方(比如按下登录 facebook 按钮时)。如果是这种情况,是否应该更新 facebook 文档,以免其他人被拒绝?或者,也许我错过了可以将其保留在应用程序委托中的某些内容,但调用其他内容以使登录成为可选?

在此先感谢您的帮助!

4

2 回答 2

2

我为解决这个问题所做的是将所有 Facebook 代码从 -applicationDidFinishLaunching 移动到自定义方法 -createFBInstance ,每当按下 UIButton 时我从 UIViewController 调用该方法,因此现在用户仅在单击按钮和应用程序时登录 Facebook效果很好!只要确保你只在你的委托中使用来自 FBSessionDelegate 的方法,我永远无法让它在任何其他类中工作。我还在应用程序内的 Web 视图中打开了登录网页,所以它看起来好多了。

于 2012-07-30T20:09:45.337 回答
1

当然会被拒绝。17.2 表示要求用户共享个人信息(例如电子邮件地址和出生日期)才能正常运行的应用程序将被拒绝。用户在拥有 Facebook 帐户之前无法使用您的应用程序。相反,我建议您将其保留为可选,例如使用 facebook/Google 登录并拥有您的应用程序自己的注册程序。

于 2012-07-30T20:10:37.640 回答