發佈訊息
- 使用在系統設定登入的 Facebook 帳號,不需要另外取得 FBSession
- 如果使用者沒有在系統設定中登入 Facebook,只會顯示 UIAlert,不會切換至 Facebook App 或 Mobile Safari 登入
SLComposeViewController *facebookPostViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[facebookPostViewController setInitialText:@"Hello World!"];
[self presentViewController:facebookPostViewController animated:YES completion:NULL];
夾帶圖片或連結:
[(SLComposeViewController *)viewController addImage:(UIImage *)image];
[(SLComposeViewController *)viewController addURL:(NSURL *)url];
讀取資料
步驟一:使用 Account.framework
,準備好所需要的 @property
@property (nonatomic, strong) ACAccountType *accountType;
@property (nonatomic, strong) ACAccountStore *accountStore;
@property (nonatomic, strong) NSDictionary *facebookOptions;
@property (nonatomic, strong) ACAccount *facebookAccount;
self.accountStore = [[ACAccountStore alloc] init];
self.accountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Facebook App ID、權限和隱私設定
self.facebookOptions = @{
ACFacebookAppIdKey: @"123456789012345",
ACFacebookPermissionsKey: @[@"read_stream"],
ACFacebookAudienceKey: ACFacebookAudienceFriends
};
步驟二:取得帳號 self.account
[self.accountStore
requestAccessToAccountsWithType:self.accountType
options:self.options
completion:^(BOOL granted, NSError *error) {
if (granted == YES) {
NSArray *accounts = [accountStore accountsWithAccountType:facebookAccountType];
self.account = [accounts lastObject];
} else {
// Fail...
}
}];
步驟三:建立 SLRequest
,指定 Graph API 的 URL 和帳號
NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodGET
URL:requestURL
parameters:nil];
request.account = self.facebookAccount;
步驟四:performRequestWithHandler:
撈資料
[request performRequestWithHandler:^(NSData *data, NSHTTPURLResponse *response, NSError *error) {
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"%s \n[Line:%03d] %@", __PRETTY_FUNCTION__, __LINE__, result);
}];
如果帳號的 access token 有問題,不會在步驟三中吐 NSError (有點麻煩),而是顯示在回傳的 data 中,如:
{
error = {
code = 190;
message = "The access token was invalidated on the device.";
type = OAuthException;
};
}
這時候就需要重新取得授權,然後再撈一次:
[self.accountStore
renewCredentialsForAccount:self.facebookAccount
completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {
if (renewResult == ACAccountCredentialRenewResultRenewed) {
// 再執行 performRequestWithHandler:
}
}];
网友评论