この問題を解決するのに本当に何時間も費やしましたが、うまくいきませんでした! Facebook から任意のユーザーのタイムライン (パブリック メッセージ) を読み取れるようにしたいだけです... 技術的には (簡単にするために)、iOS SDK のフレームワークのみを使用することをお勧めします (つまり、Facebook を使用する必要はありません)。したがって、私は現在 Social.framework と Accounts.framework のみを使用しています
私がこれまでに成功したことは、現在ログインしているユーザー (デバイスで識別されたユーザー) の Facebook タイムラインを読み取ることですが、次の URL @" https: //graph.facebook.com/me/feed " 空のデータ フィールドのみを返します (「メッセージ」ノードはありません)。
「奇妙な」事実は、@「 https://graph.facebook.com/cocacola/feed 」を使用して、企業タイプのフィード(たとえば「コカコーラ」など)に正常に到達できることです。
だから私の質問は、「単純な」ユーザー(たとえば「shireesh.asthana」)のフィードに到達して、「メッセージ」を読むことができるようにする方法です。
これまでの私のプロセス:
- https://developers.facebook.com/でアプリを作成して AppID を取得します
- この AppID をコードで使用して、SLRequest を使用してリクエストを送信できるようにします
以下は私が現在使用しているコードです:
ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Specify App ID and permissions
NSDictionary *options = @{
ACFacebookAppIdKey: @"1111111111111", // My AppID here
//ACFacebookPermissionsKey: @[@"read_stream"],
ACFacebookPermissionsKey: @[@"email", @"read_stream"],
ACFacebookAudienceKey:ACFacebookAudienceFriends
};
[account requestAccessToAccountsWithType:accountType
options:options completion:^(BOOL granted, NSError *error)
{
if (granted == YES)
{
NSArray *arrayOfAccounts = [account
accountsWithAccountType:accountType];
if ([arrayOfAccounts count] > 0)
{
ACAccount *facebookAccount = [arrayOfAccounts lastObject];
// I want the messages and the author
NSDictionary *parameters = @{@"fields": @"message,from"};
NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/HERE_THE_USER_ID/feed"]; // Work with "cocacola" but not with "shireesh.asthana"
SLRequest *getRequest = [SLRequest
requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodGET
URL:feedURL
parameters:parameters];
getRequest.account = facebookAccount;
[getRequest performRequestWithHandler:
^(NSData *responseData, NSHTTPURLResponse
*urlResponse, NSError *error)
{
dataSource = [NSJSONSerialization
JSONObjectWithData:responseData
options:NSJSONReadingMutableLeaves
error:&error];
// Reach the main queue to process result
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Read %d messages", [dataSource[@"data"] count]);
if ([dataSource[@"data"] count] != 0) {
// Do stuff in case of success...
} else {
// Do stuff in case of ERROR...
}
});
}];
} else {
// Case of no facebook account on the device...
}
} else {
// User don't grant the app to access its facebook info...
}
}];