更新: 返されたグラフ オブジェクトが更新されていないようです。メッセージ フィールドを変更し、送信者が正しいメッセージを送信していることを確認しました (少なくとも Web ダイアログ ビューには表示されます) が、受信者はまだ古いメッセージを受信しています。
ディープリンクを介してアプリに戻ってくる Facebook リクエストに追加されたデータを読み取る際に問題が発生しています。Facebook SDK のチュートリアルに従って、タイトルとメッセージで通知要求を送受信できますが、追加しているデータが受信者に表示されないようです。これが私のコードです:
送信者:
FBSBJSON *jsonWriter = [FBSBJSON new];
NSDictionary *gift = [NSDictionary dictionaryWithObjectsAndKeys:
@"5", @"social_karma",
@"1", @"badge_of_awesomeness",
nil];
NSString *giftStr = [jsonWriter stringWithObject:gift];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
giftStr, @"data",
nil];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSArray *permissions = [NSArray arrayWithObjects:@"email", @"user_birthday", @"user_photos", nil];
appDelegate.session = [[FBSession alloc] initWithPermissions:permissions];
[appDelegate.session openWithCompletionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
NSString *message = [NSString stringWithFormat:@"photoID:%@", self.photoModel.photoID];
// Display the requests dialog
[FBWebDialogs
presentRequestsDialogModallyWithSession:appDelegate.session
message:@"Learn how to make your iOS apps social."
title:@"What do you think? I just rate this person an "
parameters:params
handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
if (error) {
// Error launching the dialog or sending the request.
NSLog(@"Error sending request.");
} else {
if (result == FBWebDialogResultDialogNotCompleted) {
// User clicked the "x" icon
NSLog(@"User canceled request.");
} else {
// Handle the send request callback
NSDictionary *urlParams = [self parseURLParams:[resultURL query]];
if (![urlParams valueForKey:@"request"]) {
// User clicked the Cancel button
NSLog(@"User canceled request.");
} else {
// User clicked the Send button
NSString *requestID = [urlParams valueForKey:@"request"];
NSLog(@"Request ID: %@", requestID);
}
}
}
}];
}];
受信者 (アプリ デリゲート内):
- (void) notificationGet:(NSString *)requestid {
NSArray *permissions = [NSArray arrayWithObjects:@"email", @"user_birthday", @"user_photos", nil];
self.session = [[FBSession alloc] initWithPermissions:permissions];
[self.session openWithCompletionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
[FBSession setActiveSession:self.session];
[FBRequestConnection startWithGraphPath:requestid
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (!error) {
NSString *title;
NSString *message;
if ([result objectForKey:@"data"]) {
title = [NSString
stringWithFormat:@"%@ sent you a gift",
[[result objectForKey:@"from"]
objectForKey:@"name"]];
FBSBJSON *jsonParser = [FBSBJSON new];
NSDictionary *requestData =
[jsonParser
objectWithString:[result objectForKey:@"data"]];
message =
[NSString stringWithFormat:@"Badge: %@, Karma: %@",
[requestData objectForKey:@"badge_of_awesomeness"],
[requestData objectForKey:@"social_karma"]];
} else {
title = [NSString
stringWithFormat:@"%@ sent you a request",
[[result objectForKey:@"from"] objectForKey:@"name"]];
message = [NSString stringWithString:
[result objectForKey:@"message"]];
}
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:title
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil,
nil];
[alert show];
}
}];
}];
}
繰り返しますが、データ (params) ではなく、メッセージとタイトルを取得できます。
ありがとう!