好的,这可能看起来像是重复的问题,但我已经浏览了所有与此问题相关的问题,但仍然无法让我的应用程序正常工作。
我按照Facebook开发者网站上的iOS教程进行了操作,并完成了以下步骤:
- 创建了一个Facebook应用程序以获取Facebook应用程序ID。
- 将此应用程序ID分配给常量并在我的应用程序中使用它来初始化Facebook对象。
- 确保我的应用程序标记为多任务处理
- 在URL下拉菜单中设置了plist中的fbAPP_ID
- 使我的AppDelegate成为FBSessionDelegate并实现了非常简单的fbDidLogin和fbDidNotLogin代理方法。
版本:XCode 4.3.2 on Lion,iOS 5.1,Facebook iOS 4.1.1
尽管如此,当Facebook授权时,我仍然无法让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但是我的配置文件中有相同的bundle ID。
无论我做什么,它总是加载Facebook并要求授权我的应用程序,然后它简单地关闭授权屏幕窗口并停留在我的Facebook屏幕上,而不是返回到我的应用程序。
还要注意:我知道它会一直询问,因为我没有检查授权令牌和过期日期......那是下一步....现在我至少想让它返回到我的应用程序,然后再担心这个问题。
我错过了什么吗?还有其他我可以尝试让Facebook返回到我的应用程序的方法吗?
编辑:另外,在调试时,出于某种原因我无法找到任何调用openURL的位置。
编辑#2:在模拟器上运行时,它通过Safari加载FB对话框(如预期),然后当我授权时,Safari会抛出一个错误,好像他们试图使用的URL无效:
这仍然告诉我很少,因为据我所知,我的fb1234567890在Info.plist中设置正确。