我对最新的iOS sdk有疑问。我成功登录并且应用程序返回但是fbDidLogin等委托方法不会被调用。
如果在没有任何控制器的情况下只在一个委托文件中尝试了所有操作并使其正常工作。但是,如果我有几个控制器它不再工作/
我使用自己编写的课程FacebookFetchter
来处理Facebook。
//FacebookFetchter.h
#import Foundation/Foundation.h>
#import "FBConnect.h"
@interface FacebookFetchter : NSObject <FBDialogDelegate,FBSessionDelegate,FBRequestDelegate> {
Facebook *facebook;
FacebookFetchter *facebookFetcher; }
@property (nonatomic, retain) IBOutlet UIWindow *window; @property (retain) Facebook *facebook; @property (retain) FacebookFetchter
*facebookFetcher; @end
// FacebookFetchter.m
#import "FacebookFetchter.h"
@implementation FacebookFetchter @synthesize facebookFetcher,facebook;
-(void)login{
NSLog(@"facebook login...");
facebook = [[Facebook alloc] initWithAppId:@"..."]; //took the id out
NSArray *permissions = [[NSArray arrayWithObjects:
@"read_stream", @"offline_access", @"user_photos", @"user_photo_video_tags" , @"friends_photo_video_tags", @"friends_photos",@"friends_about_me",@"user_about_me",@"manage_friendlists",@"read_friendlists",@"user_birthday",@"friends_birthday", nil] retain];
[facebook authorize:permissions delegate:self];
}
...
-(void)fbDidLogin {
NSLog(@"Erfolgreich eingeloggt...."); } ...
@end
在我的委托中,我实现了这个,并且我还使用fbapp_id url方案设置了plist
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSLog(@"AppDelegate handleOpenURL");
return [[[settings facebookFetcher] facebookFetcher] handleOpenURL:url];
}
设置是我的视图控制器:
//settings.h @interface Settings : UIViewController {
FacebookFetchter *facebookFetcher;
//Facebook *facebook; }
@property (retain) FacebookFetchter
*facebookFetcher;
- (IBAction)sync; @end
//settings.m @synthesize facebookFetcher;
//within this action the facebook login is called
- (IBAction)sync{
NSLog(@"sync...");
facebookFetcher = [[FacebookFetchter alloc] init];
[facebookFetcher login]; }
有什么建议吗?
谢谢!
答案 0 :(得分:3)
我刚遇到这个问题并相信我可能找到了你的解决方案。在Facebook上创建应用程序时,您必须编辑应用程序设置以允许本机ios应用程序。所选的ios软件包ID必须与您正在创建的应用程序中的软件包ID完全匹配。 Facebook声明他们在授权您的应用之前检查了这一点。有趣的是,如果您从设备中删除Facebook应用程序,然后尝试验证它使用Web浏览器,似乎完全转换这个“安全”。 Facebook不会发回错误消息,因此追踪会很有趣。我想我会把这个答案扔到那里,希望能为未来的开发者节省一些麻烦。我希望这会有所帮助。
答案 1 :(得分:1)
我遇到了同样的问题。对我来说,通过取消选中Info plist中的“Application is not running in background”属性来解决它。
答案 2 :(得分:1)
我有同样的问题。我没有设置Facebook访问权限。我写了一行额外的代码
NSArray *permissions = [[NSArray arrayWithObjects:@"read_stream",@"offline_access","publish_stream", nil] retain];
它的工作完美。