Я зашел в тупик API Facebook для входа в систему. Я не могу найти ничего полезного в сети.
Мои методы FBSessionDelegate не вызываются, а значения accessToken и expirationDate не устанавливаются, поэтому я не думаю, что я когда-либо входил в систему.
Я вернулся к очень простому приложению, содержащему только две кнопки (вход, выход из системы) и метку для просмотра информации о состоянии.
Вот код для контроллера представления, где происходит вся обработка:
//
#import <UIKit/UIKit.h>
#import "Facebook.h"
@interface facebook_login_testViewController : UIViewController <FBSessionDelegate>{
UIButton *loginButton;
UIButton *logoutButton;
UILabel *info;
Facebook *facebook;
}
@property (nonatomic, retain) Facebook *facebook;
- (void) loggingIn;
- (void) loggingOut;
@end
и
#import "facebook_login_testViewController.h"
@implementation facebook_login_testViewController
@synthesize facebook;
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
loginButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[loginButton setTitle: @"Log In" forState:UIControlStateNormal];
[loginButton addTarget:self action:@selector(loggingIn) forControlEvents:UIControlEventTouchUpInside];
loginButton.frame = CGRectMake(200, 200, 200, 50);
logoutButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[logoutButton setTitle: @"Log Out" forState:UIControlStateNormal];
[logoutButton addTarget:self action:@selector(loggingOut) forControlEvents:UIControlEventTouchUpInside];
logoutButton.frame = CGRectMake(200, 300, 200, 50);
info = [[UILabel alloc] initWithFrame:CGRectMake(200, 400, 400, 600)];
info.numberOfLines = 0;
[self.view addSubview:loginButton];
[self.view addSubview:logoutButton];
[self.view addSubview:info];
info.text = @"Waiting to log in...\n\nPress the login button.";
facebook = [[Facebook alloc] initWithAppId:@"159...........5" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
- (void) loggingIn{
if (![facebook isSessionValid]) {
[facebook authorize:nil];
}
}
- (void) loggingOut{
info.text = [NSString stringWithFormat:@"\naccess token: %@\nexpiration date: %@\nfacebood description:%@\n",facebook.accessToken, facebook.expirationDate, facebook];
[facebook logout:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [facebook handleOpenURL:url];
}
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
@end
Файл .plist настроен так
![enter image description here](https://i.stack.imgur.com/17XKA.png)
Это действительно выглядит слишком просто, чтобы ошибиться. Когда я нажимаю кнопку входа в систему, я могу проследить через authorize:permission
, а затем authorize:permissions localAppId:localAppId
, и, насколько я могу отследить, я не вижу ничего похожего на то, что isSessionValid
станет ИСТИНОЙ.
Я жду, а затем нажимаю кнопку выхода из системы и смотрю на некоторые параметры Facebook, на случай, если что-то должно произойти асинхронно, и они все еще равны нулю.
Может кто-нибудь увидеть, чего мне не хватает?