1 回の Facebook Graph API 呼び出しで複数の Facebook request_ids を取得または削除する方法はありますか?
たとえば、ユーザーが同じアプリに対してさまざまな人から複数のリクエストを受け取った場合、それらは 1 つの通知としてグループ化され、ユーザーが通知を受け入れると、すべての request_ids がカンマ区切りのリストとしてアプリに渡されます。それぞれをループして個別に取得/削除する必要を回避する方法はありますか?
1 回の Facebook Graph API 呼び出しで複数の Facebook request_ids を取得または削除する方法はありますか?
たとえば、ユーザーが同じアプリに対してさまざまな人から複数のリクエストを受け取った場合、それらは 1 つの通知としてグループ化され、ユーザーが通知を受け入れると、すべての request_ids がカンマ区切りのリストとしてアプリに渡されます。それぞれをループして個別に取得/削除する必要を回避する方法はありますか?
バッチ リクエストはおそらく機能するという Binyamin の意見は正しいです。しかし、request_ids でリクエスト データを取得するには、それらをカンマ区切りのリストとして渡すだけで、バッチ リクエストを回避できることがわかりました。
NSString *requestIds = @"123456789,987654321";
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:requestIds forKey:@"ids"];
[facebook requestWithGraphPath:@"" andParams:params andDelegate:self];
最終的なグラフ URL は次のようになります。
https://graph.facebook.com/?ids=REQUEST_ID1,REQUEST_ID2,REQUEST_ID3&access_token=ACCESS_TOKEN
削除操作については、バッチ操作がまだ必要だと思います。上記の呼び出しで FB から request_id データを取得すると、それは各 result_id をキーとする NSDictionary になります。各キーを見て、それらをすべて削除するバッチ操作を作成できます。
NSDictionary *requests = DATA_RETURNED_FROM_FACEBOOK;
NSArray *requestIds = [requests allKeys];
NSMutableArray *requestJsonArray = [[[NSMutableArray alloc] init] autorelease];
for (NSString *requestId in requestIds) {
NSString *request = [NSString stringWithFormat:@"{ \"method\": \"DELETE\", \"relative_url\": \"%@\" }", requestId];
[requestJsonArray addObject:request];
}
NSString *requestJson = [NSString stringWithFormat:@"[ %@ ]", [requestJsonArray componentsJoinedByString:@", "]];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:requestJson forKey:@"batch"];
[facebook requestWithGraphPath:@"" andParams:params andHttpMethod:@"POST" andDelegate:nil];
https://developers.facebook.com/docs/reference/api/batch/によると、バッチ リクエストの現在の制限は 50です。したがって、完全に安全を期すためには、request_ids の数を確認する必要があります。50 を超える場合は、複数のバッチ リクエストを実行する必要があります。
私が正しく理解していれば、バッチ リクエストを使用して 1 回の呼び出しで複数の操作を実行できます。
例えば:
NSString *req01 = @"{ \"method\": \"GET\", \"relative_url\": \"me\" }";
NSString *req02 = @"{ \"method\": \"GET\", \"relative_url\": \"me/friends?limit=50\" }";
NSString *allRequests = [NSString stringWithFormat:@"[ %@, %@ ]", req01, req02];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:allRequests forKey:@"batch"];
[facebook requestWithGraphPath:@"me" andParams:params andHttpMethod:@"POST" andDelegate:self];
通知を繰り返し処理する必要がありますが、1 つまたは 2 つの要求を使用してすべてのアクションを実行できます。