iOS:发送Facebook请求
我已经发送了Facebook请求。 它的工作正常,但我得到的请求(通知)只在iPhone的Facebook应用程序,而不是在Facebook的Web应用程序。 我希望Facebook本机应用程序和Web应用程序都能收到通知。 我怎样才能做到这一点?
#pragma Sending Facebook app request - (NSDictionary*)parseURLParams:(NSString *)query { NSArray *pairs = [query componentsSeparatedByString:@"&"]; NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; for (NSString *pair in pairs) { NSArray *kv = [pair componentsSeparatedByString:@"="]; NSString *val = [[kv objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [params setObject:val forKey:[kv objectAtIndex:0]]; } return params; } - (void)sendRequest { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{ @"social_karma": @"5", @"badge_of_awesomeness": @"1"} options:0 error:&error]; if (!jsonData) { NSLog(@"JSON error: %@", error); return; } NSString *giftStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: giftStr, @"data", nil]; // Display the requests dialog [FBWebDialogs presentRequestsDialogModallyWithSession:nil message:@"Learn how to make your iOS apps social." title:nil 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)sendRequestClicked { // Filter and only show friends using iOS [self requestFriendsUsingDevice:@"iOS"]; } - (void)sendRequest:(NSArray *) targeted { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{ @"social_karma": @"5", @"badge_of_awesomeness": @"1"} options:0 error:&error]; if (!jsonData) { NSLog(@"JSON error: %@", error); return; } NSString *giftStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:giftStr, @"data", nil]; // Filter and only show targeted friends if (targeted != nil && [targeted count] > 0) { NSString *selectIDsStr = [targeted componentsJoinedByString:@","]; [params setObject:selectIDsStr forKey:@"suggestions"]; } // Display the requests dialog [FBWebDialogs presentRequestsDialogModallyWithSession:nil message:@"Learn how to make your iOS apps social." title:nil parameters:params handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) { if (error) { // Error launching the dialog or sending 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) requestFriendsUsingDevice:(NSString *)device { NSMutableArray *deviceFilteredFriends = [[NSMutableArray alloc] init]; [FBRequestConnection startWithGraphPath:@"me/friends" parameters:[NSDictionary dictionaryWithObjectsAndKeys: @"id,devices", @"fields", nil] HTTPMethod:nil completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if (!error) { // Get the result NSArray *resultData = [result objectForKey:@"data"]; // Check we have data if ([resultData count] > 0) { // Loop through the friends returned for (NSDictionary *friendObject in resultData) { // Check if devices info available if ([friendObject objectForKey:@"devices"]) { NSArray *deviceData = [friendObject objectForKey:@"devices"]; // Loop through list of devices for (NSDictionary *deviceObject in deviceData) { // Check if there is a device match if ([device isEqualToString: [deviceObject objectForKey:@"os"]]) { // If there is a match, add it to the list [deviceFilteredFriends addObject: [friendObject objectForKey:@"id"]]; break; } } } } } } // Send request [self sendRequest:deviceFilteredFriends]; }]; }
如果您的应用程序已经实施了Facebook Canvas应用程序,则只能在Facebook Web应用程序上收到通知。
invitable_friends API仅适用于使用Graph API 2.0版本的Facebook Canvas应用程序实现的游戏。
在这里查看完整的文档
canvas是将桌面和笔记本电脑上的应用程序或游戏直接放在Facebook.com上的框架。
关于canvas的细节
注意:在文档中你会发现“你的游戏”,他们的意思是“你的游戏或你的应用程序”。
- AFURLConnectionOperation.m隐式转换失去整数精度:'int64_t'(又名'long long')到'NSInteger'(又名'int')
- UITextView在animation视图之后的内容偏移量偏移
- 从iOS应用程序直接login到Facebook – Facebook的SDK 3.1
- 本机iOS Facebook SSO不会返回到应用程序
- 处理连接到Web服务的原生应用程序的loginfunction
- 我正在尝试loginFacebook,它login成功,但不返回到应用程序
- 如果用户通过Facebooklogin,如何以编程方式启动到另一个viewController
- swift 3:input'Any?' 没有下标成员
- 在iOS中抓取Facebook好友时出错
- iOS:Facebooklogin访问令牌错误:由于模拟器错误,从NSUserDefaults回落到加载访问令牌
- 一个Facebook应用程序与多个iOS应用程序关联