iOS:发送Facebook请求 [英] iOS :Sending Facebook Request

查看:96
本文介绍了iOS:发送Facebook请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经发送了Facebook的请求。它的工作正常,但我正在获得请求(通知)只在iPhone的Facebook应用程序,而不是在Facebook的Web应用程序。我想要Facebook本机应用程序和Web应用程序接收通知。如何做到这一点?

  #pragma发送Facebook应用程序请求

- (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]];
}
返回参数;
}
- (void)sendRequest {
NSError * error;
NSData * jsonData = [NSJSONSerialization
dataWithJSONObject:@ {
@social_karma:@5,
@badge_of_awesomeness:@1}
选项:0
错误:& error];
if(!jsonData){
NSLog(@JSON error:%@,error);
返回;
}
NSString * giftStr = [[NSString alloc]
initWithData:jsonData
encoding:NSUTF8StringEncoding];
NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
giftStr,@data,
nil];

//显示请求对话框
[FBWebDialogs
presentRequestsDialogModallyWithSession:nil
message:@了解如何使您的iOS应用程序成为社交。
标题:nil
参数:params
处理程序:^(FBWebDialogResult结果,NSURL * resultURL,NSError *错误){
if(error){
//错误启动对话框或发送请求。
NSLog(@发送请求时发生错误);
} else {
if(result == FBWebDialogResultDialogNotCompleted){
//用户点击x图标
NSLog(@用户已取消请求);
} else {
//处理发送请求回调
NSDictionary * urlParams = [self parseURLParams:[resultURL query]];
if(![urlParams valueForKey:@request]){
//用户点击取消按钮
NSLog(@用户已取消请求);
} else {
//用户点击发送按钮
NSString * requestID = [urlParams valueForKey:@request];
NSLog(@请求ID:%@,requestID);
}
}
}
}];
}

- (void)sendRequestClicked {
//过滤并只显示使用iOS
的朋友[self requestFriendsUsingDevice:@iOS];
}


- (void)sendRequest:(NSArray *)有针对性{
NSError * error;
NSData * jsonData = [NSJSONSerialization
dataWithJSONObject:@ {
@social_karma:@5,
@badge_of_awesomeness:@1}
选项:0
错误:& error];
if(!jsonData){
NSLog(@JSON error:%@,error);
返回;
}
NSString * giftStr = [[NSString alloc]
initWithData:jsonData
encoding:NSUTF8StringEncoding];
NSMutableDictionary * params =
[NSMutableDictionary dictionaryWithObjectsAndKeys:giftStr,@data,
nil];

//过滤并只显示目标朋友
if(targeted!= nil&&""""             :@ ];
[params setObject:selectIDsStr forKey:@suggestions];
}

//显示请求对话框
[FBWebDialogs
presentRequestsDialogModallyWithSession:nil
message:@了解如何使您的iOS应用程序成为社交。
标题:nil
参数:params
处理程序:^(FBWebDialogResult结果,NSURL * resultURL,NSError *错误){
if(error){
//错误启动对话框或发送请求。
NSLog(@发送请求时发生错误);
} else {
if(result == FBWebDialogResultDialogNotCompleted){
//用户点击x图标
NSLog(@用户已取消请求);
} else {
//处理发送请求回调
NSDictionary * urlParams = [self parseURLParams:[resultURL query]];
if(![urlParams valueForKey:@request]){
//用户点击取消按钮
NSLog(@用户已取消请求);
} else {
//用户点击发送按钮
NSString * requestID = [urlParams valueForKey:@request];
NSLog(@请求ID:%@,requestID);
}
}
}
}];
}


- (void)requestFriendsUsingDevice:(NSString *)device {
NSMutableArray * deviceFilteredFriends = [[NSMutableArray alloc] init];
[FBRequestConnection startWithGraphPath:@我/朋友
参数:[NSDictionary
dictionaryWithObjectsAndKeys:
@id,devices,@fields,
nil]
HTTPMethod:nil
completionHandler:^(FBRequestConnection * connection,
id result,
NSError * error){
if(!error){
/ /获取结果
NSArray * resultData = [result objectForKey:@data];
//检查我们有数据
if([resultData count]> 0){
//循环通过返回的朋友
for(NSDictionary * friendObject in resultData){
//检查设备信息是否可用
if([friendObject objectForKey:@devices]){
NSArray * deviceData = [friendObject
objectForKey:@devices];
//循环通过设备列表
for(NSDictionary * deviceObject in deviceData){
//检查是否有设备匹配
if([device isEqualToString:
[deviceObject objectForKey:@os]]){
//如果有匹配,将其添加到列表
[deviceFilteredFriends addObject:
[friendObject objectForKey:@id ]];
break;
}
}
}
}
}
}
//发送请求
[self sendRequest:deviceFilteredFriends];
}];
}


解决方案

如果您的应用程序已实施Facebook Canvas应用程序,则可以使用Facebook Web应用程序。


invitable_friends API仅适用于
的游戏使用Graph API 2.0版的Facebook Canvas应用程序实现。


请查看完整的文档


画布是在桌面和笔记本电脑上将您的应用程序或游戏直接放在
Facebook.com上的框架。


有关画布的详细信息



注意:你会发现你的游戏的文档,他们的意思是你的游戏或你的应用程序。


I have sent facebook request. Its working fine, but I am getting request(notification) only in iPhone facebook App, not in Facebook web application. I want both Facebook native app and web application to receive notification. How can I do that?

#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];
                          }];
}

解决方案

You can only get notifications on Facebook web application if your app has a Facebook Canvas app implemented.

The invitable_friends API is only available for games that have a Facebook Canvas app implementation using version 2.0 of the Graph API.

Check here the full documentation

Canvas is a frame in which to put your app or game directly on Facebook.com on desktops and laptops.

Details about Canvas

Note: In the documentation you will find "your game", they mean "your game or your app".

这篇关于iOS:发送Facebook请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆