, пока пользователь вошел в систему и предоставил разрешения один раз, ему не нужно делать это снова.Вот код, который я использую:
//these to need to be declared in .h
NSString * currentRequest;
BOOl hasAskedForPermissions;
FBSession * mySession
//then in .m
@synthesize currentRequest
@synthesize hasAskedForPermissions
-(void)viewDidLoad {
static NSString* kApiKey = @"XXXXXXXXXXXXXXXXXXXXXXX";
static NSString* kApiSecret = @"XXXXXXXXXXXXXXXXXXXXXXXXXX";
mySession = [[FBSession alloc] initWithKey:kApiKey secret:kApiSecret getSessionProxy:nil];
}
-(void)resumeConnection {
NSLog(@"resuming connection");
static NSString* kApiKey = @"XXXXXXXXXXXXXXXXXXXXXXX";
static NSString* kApiSecret = @"XXXXXXXXXXXXXXXXXXXXXXXXXX";
if ([mySession resume]) {
}
else {
NSLog(@"session did not resume successfully");
mySession = [[FBSession sessionForApplication:kApiKey
secret:kApiSecret delegate:self] retain];
_loginDialog = [[FBLoginDialog alloc] init];
[_loginDialog show];
}
}
-(void)postStatus {
currentRequest = @"post status";
//NSLog(@"current request: %@", currentRequest);
if (!(mySession.isConnected)) {
[self resumeConnection];
}
else if (mySession.isConnected) {
NSLog(@"session is connected");
//Add your posting code here.
} else {
NSLog(@"session is not connected, did not connect");
}
}
-(void)loadPermissionDialog {
FBPermissionDialog* dialog = [[FBPermissionDialog alloc] initWithSession:_session];
dialog.delegate = self;
dialog.permission = @"read_stream, publish_stream, read_friendlists";
[dialog show];
}
- (void)session:(FBSession *)session didLogin:(FBUID)uid {
NSLog(@"Session Logged in sucessfully");
//NSLog(@"current request: %@", currentRequest);
mySession = session;
if (hasAskedForPermissions) {
if ([currentRequest isEqualToString:@"post status"]) {
[self postStatus];
}
}
else {
NSLog(@"asking for permissions");
hasAskedForPermissions = YES;
//you should save this in UserDefaults and recall it in viewDidLoad
[self loadPermissionDialog];
}
}
Я не знаю, как на самом деле сделать запрос после публикации, но если вы запустите этот код, пользователь должен будет только войти в систему и назначить разрешения один раз.