好吧这看起来像是重复但我已经解决了围绕这个问题的所有问题,我似乎仍然无法让这个适用于我的应用程序。
我已经关注了Facebook开发者网站上的iOS教程,我已经完成了以下工作:
版本: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 App屏幕(大部分粉红色):
注意:我仅使用基本设置尝试了此操作,并且还使用了具有虚假iTunes商店ID但来自我的配置文件的相同捆绑ID的iOS Native应用设置。
无论我做什么,它总是加载Facebook并要求授权我的应用程序然后它只是关闭auth屏幕窗口并坐在我的Facebook屏幕上,而不是返回到我的应用程序。
另请注意:我知道它会一直问,因为我没有检查身份验证令牌和失效日期.....这是下一步....现在我想至少让它返回到在我担心之前我的应用程序。
我错过了什么吗?还有什么我可以试着让Facebook回到我的应用程序吗?
编辑:同样在调试时,我似乎找不到任何因某种原因调用openURL的地方。 编辑#2:在模拟器上运行它时,它会通过Safari加载FB对话框(如预期的那样),然后当我授权时,safari会抛出一个错误,好像他们试图用来回到我的网址一样应用无效:
这仍然没有告诉我,因为我的fb1234567890设置正确,据我所知在Info.plist中。
答案 0 :(得分:19)
您的info.plist似乎格式不正确
确保url方案嵌套在名为“URL Schemes”的项目(确切的数组)下
此数组应包含可启动应用的所有可能的URL方案
有关URL方案的更好说明,请参阅附图。
此外,“URL标识符”应该是您的包标识符:ex。 com.mycompany.myapp 这应该与您在配置文件中提供的标识符相匹配
希望这有帮助!
答案 1 :(得分:3)
Facebook开发人员的一面:
如果您的应用已经提交,请填写iphone / ipad appstore id,否则请将其留空。
你的XCode中的下一个:
转到
Target > Info > URL Types
&gt;点击加号图标并添加如下项目 -
在我的应用程序中,有两个选项通过Facebook和谷歌登录,所以我创建了两个URL类型。您可以看到第二个是Facebook URL类型设置。 URL计划将是您在开发时使用fb
的Facebook开发人员帐户中的Facebook应用程序ID。因此,如果您的Facebook开发者应用ID为9876543267575645
,则网址方案将变为fb9876543267575645
。
接下来,您必须在info.plist中添加新密钥。因此,请保持在同一屏幕中并添加FacebookAppID
,如下所示:
所有这些东西都会在facebook oauth成功后将你的应用程序带回来。
您将在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];
}
在此期间,必须在facebook
AppDelegate.m
个实例
@synthesize facebook = _facebook;
和didFinishLaunchingWithOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_facebook = [[Facebook alloc] initWithAppId:facebookid];
// rest of your code is already here......
}
还有一件重要的事情。在我实施这些步骤的过程中,我也做了太多的研究来实现这一目标,最后工作的东西就在这里。我在两个应用程序中进行了这些设置。
但是当我创建第三个应用程序时,我从一开始就没有按照第1步和第3步进行操作,并且重新定向工作!因此,当您在应用中登录Facebook时,我认为不需要Facebook开发者帐户原生iOS应用设置..
答案 2 :(得分:2)
我遇到了另一个问题。我编辑了原始Info.plist文件并添加了:
<key>URL Types</key>
<array>
<dict>
<key>URL Schemes</key>
<array>
<string>fbxxxxxxxxx</string>
</array>
</dict>
</array>
这不起作用,因为密钥不是'URL类型','URL方案'和'URL标识符',而是'CFBundleURLTypes','CFBundleURLSchemes'和'CFBundleURLIdentifier'。 Xcode会在编辑器中将其重命名为“URL类型”,“URL方案”和“URL标识符”。
确保在xcode中选择Info.plist,右键单击 - >显示原始键/值。
答案 3 :(得分:0)
上述所有内容或SO上的其他答案都不适用于我,尽管我似乎有完全相同的问题。
然而,当我启用“深层链接”时,它工作得很好,所以它可能是上述所有AND的组合,也是启用该选项。