アクセスをリクエストするには、アカウントストアのメソッドを使用する必要があります。
-(void)authenticateFacebook {
if([UIActivityViewController class] ) {
NSArray *faceBookPermissions = @[@"publish_stream"];
////ACFacebookAppVersionKey: @"1.0",
NSDictionary *faceBookOptions = @{
ACFacebookAppIdKey: @"xxxxxxxx",
ACFacebookPermissionsKey:faceBookPermissions,
ACFacebookAudienceKey:ACFacebookAudienceFriends
};
AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if(del.accountStore == nil) {
del.accountStore = [[ACAccountStore alloc] init];
}
if(del.facebookAccount == nil) {
ACAccountType *facebookAccountType = [del.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
[del.accountStore requestAccessToAccountsWithType:facebookAccountType
options:faceBookOptions
completion:^(BOOL granted, NSError *error)
{
if (granted) {
NSArray *accounts = [del.accountStore accountsWithAccountType:facebookAccountType];
del.facebookAccount = [accounts lastObject];
NSLog(@"got an account");
[self performSelectorOnMainThread:@selector(gotAnAccount) withObject:self waitUntilDone:NO];
} else {
NSLog(@"No account");
//fail gracefully
[self performSelectorOnMainThread:@selector(noAccount) withObject:self waitUntilDone:NO];
}
}];
}
}
それが完了したら、次のようにアプリIDを使用してFacebookに投稿できます。
-(void)postToFacebook:(NSDictionary *)parameters {
AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:feedURL
parameters:parameters];
request.account = del.facebookAccount;
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSString *alertText;
if (error) {
alertText = [NSString stringWithFormat:
@"error: domain = %@, code = %d",
error.domain, error.code];
[self performSelectorOnMainThread:@selector(errorWithRequest:) withObject:alertText waitUntilDone:NO];
} else {
alertText = @"Posted action, id: %@";
[self performSelectorOnMainThread:@selector(cancelButtonAction:) withObject:nil waitUntilDone:NO];
}
NSLog(@"%@",alertText);
}];
}
appデリゲートにaccountStore変数とaccount変数を設定してから、使用する@selectorメソッドを作成する必要があります。完了ハンドラーがUIで何かを行う場合は、メインスレッドで実行する必要があることに注意してください。そうしないと、完了ハンドラーのUIコードが実行されるのをしばらく待つことになります。