如何在 iOS 版 Facebook SDK 中定义“GeoPoint”属性

Posted

技术标签:

【中文标题】如何在 iOS 版 Facebook SDK 中定义“GeoPoint”属性【英文标题】:How to define a "GeoPoint" property in Facebook SDK for iOS 【发布时间】:2013-12-04 13:26:24 【问题描述】:

我正在尝试通过创建一个继承自预定义“地点”对象的开放图对象来对开放图谱故事进行地理标记。但是,我不知道如何在 ios 中定义 GeoPoint 属性“place:location”!这里有一个类似问题的答案:https://***.com/a/19386730/824515,我尝试过但没有成功。

现在,我试图通过直接设置“地点”对象来解决问题,但这并没有帮助。我收到此错误消息:

error =         
        code = 100;
        message = "(#100) Object Missing a Required Value: Object at URL '' of type 'place' is invalid because a required property 'place:location' of type 'geo_point' was not provided.";
        type = OAuthException;
    ;

这是我的测试代码:

答:

FBRequestConnection *connection = [[[FBRequestConnection alloc] init] autorelease];
id<FBOpenGraphObject> object = [FBGraphObject openGraphObjectForPost];
object[@"type"] = @"place";
object[@"title"] = @"Test Title";

object[@"location"] = @@"latitude": @"48.85831", @"longitude": @"2.29465";

NSLog(@"object = %@", [object description]);
FBRequest *objectRequest = [FBRequest requestForPostOpenGraphObject: object];
[connection addRequest: objectRequest
     completionHandler: ^(FBRequestConnection *connection, id result, NSError *error) 
         DLine();
         if (error)
             NSLog(@"Error: %@", error);
         else
             NSLog(@"Result: %@", [result description]);
     ];
[connection start];

我已尝试将object[@"location"] = … 行替换为我能想到的所有内容,例如:

乙:

object[@"place:location"] = @@"latitude": @"48.85831", @"longitude": @"2.29465";

C:

object[@"place"] = @@"location":
                         @@"latitude": @"48.85831", @"longitude": @"2.29465"
                     ;

D:

object[@"location:latitude"] = @"48.85831";
object[@"location:longitude"] = @"2.29465";

E:

object[@"place:location:latitude"] = @"48.85831";
object[@"place:location:longitude"] = @"2.29465";

所有版本 A - E 的错误消息都是相同的。

【问题讨论】:

你试过[object setObject:@@"latitude":@"48.85831", @"longitude": @"2.29465" forKey:@"location"];吗? @Virussmca:哈,你在我打字的时候编辑了 ;-) 无论如何,我已经尝试过了。它完全等同于我的版本“A”。 您好,从 2015 年开始!我现在也有同样的问题,你当时发现了吗?请拯救我的一天。 抱歉 vlad24,我当时无法解决这个问题,所以我放弃了它,从那以后没有检查任何更新。 【参考方案1】:

我相信它们需要嵌套字典,因此您需要创建一个“位置”图形对象,然后将其设置为打开图形对象上的位置。比如:

id<FBGraphObject> place = [FBGraphObject graphObject];
id<FBGraphObject> location = [FBGraphObject graphObject];
location[@"latitude"] = @"48.85831";
location[@"longitude"] = @"2.29465";
place[@"location"] = location;
place[@"name"] = @"foobar";

object[@"place"] = place;

【讨论】:

感谢您的回答,但不幸的是它不起作用。生成的字典与问题中的版本“C”几乎相同(使用 NSLog 语句验证),唯一的区别是您为“地点”字典分配了一个“名称”。 与其创建“地点”对象,不如直接向您的自定义打开图形对象添加 GeoPoint 属性?【参考方案2】:

这对我有用:

NSMutableDictionary<FBOpenGraphObject> *store = [FBGraphObject openGraphObjectForPost];
store.provisionedForPost = YES;
store[@"og"] = @ @"title":@"Test Title", @"type":@"place" ;
store[@"place"] = @ @"location" : @ @"longitude": @"-58.381667", @"latitude":@"-34.603333" ;

[FBRequestConnection startForPostWithGraphpath:@"me/objects/place"
                                 graphObject:@@"object":store
                           completionHandler:^(FBRequestConnection *connection,
                                               id result,
                                               NSError *error) 
  if (!error) 
    NSLog(@"result: %@", result);
  
  else 
    NSLog(@"%@", [NSString stringWithFormat:@"%@", error.description]);
   
];

【讨论】:

嘿,伙计,您的回答似乎很有趣.. 但是您能提供一些解释吗?【参考方案3】:

试试这个:

object[@"data"][@"location"] = @@"latitude": @"48.85831", @"longitude": @"2.29465";

Facebook 文档没有明确提到我们应该将附加属性放在键 data 下。

【讨论】:

以上是关于如何在 iOS 版 Facebook SDK 中定义“GeoPoint”属性的主要内容,如果未能解决你的问题,请参考以下文章

更新 iOS 版 Facebook SDK

我是 iOS 版 Facebook SDK 的新手。我想向 Facebook 上的朋友发送邀请

使用 iOS 版 Facebook SDK 发布故事时未上传图片

使用 iOS 版 Facebook SDK 3.5 时更改键盘外观

Facebook ios sdk 语言

使用 Facebook iPhone SDK 时如何刷新 oauth 令牌