本机iOS Facebook SSO不会返回到应用程序
好吧,这可能看起来像一个重复,但我已经通过所有的问题围绕这个问题,我仍然无法得到这个工作,我的应用程序。
我已经在Facebook开发者网站上关注了iOS教程,并且完成了以下内容:
- 创build一个Facebook应用程序来获取Facebook应用程序ID。
- 我已经将这个App ID分配给一个常量,我用它来初始化我的应用程序中的Facebook对象。
- 我已经确定我的应用程序被标记为多任务处理
- 我已经在plist下的URL下拉菜单中设置了fbAPP_ID
- 我做了我的AppDelegate FBSessionDelegate,并实现了非常简单的fbDidLogin和fbDidNotLogin委托方法。
版本:Lion,iOS 5.1,Facebook iOS 4.1.1上的XCode 4.3.2
所有这一切,我仍然无法让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 porton:
Facebook的应用程序屏幕(大部分是淡出):
注意:我只使用基本设置进行了尝试,并且使用假的iTunes商店ID与iOS本机应用程序设置进行了对比,但使用了我的configuration文件中的相同包ID。
无论我做什么总是加载Facebook,并要求授权我的应用程序,然后它只是closures身份validation屏幕窗口,坐在我的Facebook屏幕上,而不是返回到我的应用程序。
另外请注意:我知道它总是会问,因为我没有检查身份validation令牌和到期date…..这是下一步….现在我想至less让它返回到我的应用程序之前我担心这一点。
我在这里错过了什么吗? 还有什么我可以尝试让Facebook返回到我的应用程序?
编辑:也debugging时,我似乎无法find任何openURL由于某种原因被调用的地方。
编辑#2:在模拟器上运行时,它通过Safari加载FB对话框(如预期的),然后当我授权时,safari抛出一个错误,就好像他们试图用来返回到我的应用程序的URL是无效的:
这还没有告诉我很多,因为我的fb1234567890安装正确,据我所知Info.plist。
您的info.plist似乎格式不正确
确保urlscheme嵌套在一个名为“URL Schemes”的项目(一个确切的数组)下,
这个数组应该包含所有可能启动你的应用的URLscheme
请参阅附加的图像以更好地解释URL计划
url scheme http://f.cl.ly/items/243G1D0H39151q472V1t/Screen%20Shot%202012-05-16%20at%206.52.06%20PM.png
另外,“URL标识符”应该是你的包标识符:ex。 com.mycompany.myapp这应该与您在configuration文件中提供的标识符相匹配
希望这可以帮助!
所有你必须遵循这些步骤
步骤1:
Facebook开发者方面的东西:
如果你的应用程序已经提交,然后填写iphone / ipad appstore id,否则留空。
第2步:
接下来在你的XCode中:
转到Target > Info > URL Types
>点击加号图标,添加像这样的项目 –
在我的应用程序中,有通过Facebook和谷歌login的选项,所以我创build了两个URLtypes。 你可以看到第二个是Facebook的URLtypes设置。 URL计划将从您的Facebook的Facebook应用程序ID开始在fb
开发者帐户。 所以如果你的Facebook开发者的应用程序ID是9876543267575645
那么URL Scheme将变成fb9876543267575645
。
第3步:
接下来,您必须在info.plist中添加一个新的密钥。 因此,保持在同一个屏幕上,添加FacebookAppID
就像这样:
所有这些东西将带来您的应用程序成功的Facebook oauth后。
步骤4:
rest你会在你的AppDelegate
类。 只需在AppDelegate.m
添加此方法
NSString *retURL = [NSString stringWithFormat:@"%@", url]; if ([retURL rangeOfString:facebookid].location != NSNotFound) { // if your application is coming back from facebook native app. return [_facebook handleOpenURL:url]; } else { // if your app is coming back from google plus oauth. return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; }
在这一切中,必须在AppDelegate.m
初始化和合成facebook
实例
@synthesize facebook = _facebook;
和didFinishLaunchingWithOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _facebook = [[Facebook alloc] initWithAppId:facebookid]; // rest of your code is already here...... }
还有一件重要的事情。 在我执行这些步骤的过程中,我也做了太多的研究来达到这个目的,最后工作的东西在这里。 我在我的两个应用程序中进行了这些设置。
但是,当我创build第三个应用程序时,我从一开始就没有遵循STEP 1和STEP 3 ,所以…redirect工作! 所以我不认为Facebook开发人员帐户本机iOS应用程序设置是必要的,当你在你的应用程序Facebooklogin。
我遇到了另一个问题。 我编辑了原始Info.plist文件并添加了:
<key>URL Types</key> <array> <dict> <key>URL Schemes</key> <array> <string>fbxxxxxxxxx</string> </array> </dict> </array>
这不起作用,因为这些键不是“URLtypes”,“URL Schemes”和“URL标识符”,而是“CFBundleURLTypes”,“CFBundleURLSchemes”和“CFBundleURLIdentifier”。 Xcode将在编辑器中将其重命名为“URLtypes”,“URL Schemes”和“URL Identifier”。
为了确保在xcode中selectInfo.plist,请右键单击 – >显示原始键/值。
以上都没有,或其他答案,为我工作,虽然我似乎有完全相同的问题。
然而,当我启用“深层链接”时,它完美地工作,所以它可能是上述所有的组合,并启用该选项。