美文网首页
使用 iOS 6 整合的 Facebook 讀取資料

使用 iOS 6 整合的 Facebook 讀取資料

作者: TomatosX | 来源:发表于2016-01-15 22:23 被阅读121次

發佈訊息
  • 使用在系統設定登入的 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:
                        }
                    }];
转自:

相关文章

网友评论

      本文标题:使用 iOS 6 整合的 Facebook 讀取資料

      本文链接:https://www.haomeiwen.com/subject/brvhkttx.html