最初にNative/Desktop
アプリとしてFBアプリ登録をしておく。
ライブラリを読み込んで、
# import <Social/Social.h>
# import <Accounts/Accounts.h>
以下が実際に送信する箇所。
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
@"APP_ID", ACFacebookAppIdKey,
[NSArray arrayWithObject:@"email"], ACFacebookPermissionsKey, nil];
[accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error) {
if (granted) {
NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
@"APP_ID", ACFacebookAppIdKey,
[NSArray arrayWithObject:@"publish_actions"], ACFacebookPermissionsKey,
ACFacebookAudienceEveryone, ACFacebookAudienceKey,
nil];
[accountStore requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error) {
if(granted){
NSArray *accounts = [accountStore accountsWithAccountType:accountType];
if ([accounts count] > 0) {
ACAccount *account = [accounts objectAtIndex:0];
ACAccountCredential *fbCredential = [account credential];
NSString *accessToken = [fbCredential oauthToken];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
accessToken, @"access_token",
@"イイねするURLなど", @"object",
nil];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://graph.facebook.com/me/og.likes"] parameters:params];
[request setAccount:account];
[request performRequestWithHandler:^(NSData* responseData, NSHTTPURLResponse* urlResponse, NSError* error) {
NSLog(@"%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
}];
}
}
}];
}
}];
ポイントとしては、
いきなりpublish_stream
とか投稿する系のpermissionをとろうとすると、Error Domain=com.apple.accounts..
みたいなエラーがでる。
回避するために一旦ベーシックなpermission(email
とか)をとっている。
また、email
などの場合は、ACFacebookAudienceKey
を指定しなくても取得できるが、投稿系のpermissionはACFacebookAudienceKey
を指定しないと、これまたエラーになるので注意。