【发布时间】:2012-05-24 09:49:39
【问题描述】:
好的,这可能看起来像重复,但我已经解决了围绕该问题的所有问题,但我似乎仍然无法让它适用于我的应用程序。
我已按照 Facebook 开发者网站上的 iOS 教程进行操作,并完成了以下操作:
- 创建了一个 Facebook 应用来获取 Facebook 应用 ID。
- 我已将此 App ID 分配给一个常量,并使用它来初始化我的应用程序中的 Facebook 对象。
- 我已确保我的应用已标记为多任务处理
- 我已经在 URL 下拉列表下的 plist 中设置了 fbAPP_ID
- 我已将 AppDelegate 设为 FBSessionDelegate 并实现了非常简单的 fbDidLogin 和 fbDidNotLogin 委托方法。
版本:Lion 上的 XCode 4.3.2、iOS 5.1、Facebook iOS 4.1.1
所有这一切,我似乎仍然无法让 Facebook 在授权时将控制权交还给我的应用程序。它只是留在 Facebook 中。
代码:(注意这里FB_APP_ID改为基本号查看)
AppDelegate.h:
#import <UIKit/UIKit.h>
#import "FBConnect.h"
#define FB_APP_ID @"1234567890"
@interface AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) Facebook* facebook;
@end
AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize facebook = _facebook;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_facebook = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self];
if (![_facebook isSessionValid])
{
[_facebook authorize:nil];
}
}
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url
{
return [_facebook handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [_facebook handleOpenURL:url];
}
- (void)fbDidLogin
{
NSLog(@"App logged in");
}
- (void)fbDidNotLogin:(BOOL)cancelled
{
NSLog(@"App did not login");
}
@end
相关 Info.plist 端口:
Facebook 应用程序屏幕(大部分为粉红色):
注意:我仅使用基本设置进行了尝试,也尝试了 iOS 本机应用设置,使用虚假的 iTunes 商店 ID 但与我的配置文件中的捆绑 ID 相同。
无论我做什么,它总是会加载 Facebook 并要求授权我的应用程序,然后它只是关闭身份验证屏幕窗口并坐在我的 Facebook 屏幕上,而不是返回到我的应用程序。
另请注意:我知道它总是会询问,因为我没有检查身份验证令牌和到期日期.....这是下一步......现在我至少想让它返回在我担心这个之前我的应用程序。
我在这里错过了什么吗?还有什么我可以尝试让 Facebook 返回到我的应用的方法吗?
编辑:同样在调试时,我似乎无法找到任何一个 openURL 出于某种原因被调用的地方。
编辑#2:在模拟器上运行它时,它会通过 Safari 加载 FB 对话框(如预期的那样),然后当我授权时,safari 会抛出一个错误,就像他们试图用来返回我的 URL 一样应用无效:
这仍然不能告诉我太多,因为据我在 Info.plist 中所知,我的 fb1234567890 已正确设置。
【问题讨论】:
-
你至少能登录一次吗?
-
问题不在于登录。Facebook 弹出就好了,我可以点击 Authorize 或其他什么.....但它永远不会返回到应用程序...它只是留在 Facebook 中跨度>
-
在 handleOpenURL 中放置一个断点或 NSLog 并检查它是否被调用,并且您是否为您的应用程序提供了一个唯一的 URL,Safari 将重定向到该 URL?
-
当我调试它时,似乎都没有调用 handleOpenUrl 调用。至于唯一的 URL,我认为这就是我使用 fbAPP_ID 的 plist 部分的用途(如上所示)?第 6 步及以后进入 Graph 和 Feeds。在这一点上,我只是想让基本的 SSO 正常工作。
标签: objective-c ios xcode facebook