0

我正在使用最新的 Facebook iOS SDK 将操作发布到 Open Graph。

现在,在我的服务器端,我在创建对象时遇到了一个错误,影响了对象的标题。

我现在修复了这个错误 - 我在 Object Debugger 工具中验证了它,而且我可以看到它已经修复了我在我的应用程序中执行操作的新对象。

但是,当我在其上发布新操作时,我最初在从我的应用程序发布操作时创建的对象仍然具有格式错误的标题。

我设法使用 Graph API Explorer 找到有问题的对象的 ID,但删除它没有运气(出现"(#3) App must be on whitelist"异常)。

有什么想法可以以某种方式强制对象重新创建吗?

编辑:

我已经尝试了James 的回答中建议的两种方法以及对类似问题的回答,但无法刷新我对格式错误的对象的现有和新发布的操作。调试器似乎确实创建了一个具有固定数据的抓取对象,但它不会更新原始对象,而是给我一个新对象(我可以在 URL 部分的“Graph API:”URL 中看到一个新 ID对象调试器的底部。

编辑:

我终于找到了适用于新操作(不是现有操作)的解决方案。请参阅下面的答案

4

3 回答 3

2

使用调试器会强制 Facebook 重新抓取 URL,因此应该会破坏缓存。您还可以通过添加 'scrape=true' 作为参数以编程方式强制重新刮擦。就像是...

POST https://graph.facebook.com

id=http://mysite.com/myobject
&
scrape=true&access_token=234876AB6865...

看看有没有帮助

于 2012-11-06T14:13:00.340 回答
1

按照此答案中针对类似问题的建议,我终于发现,如果我更改iOS app的代码以将 FBGraphObject 的 URL 设置为包含:&fbrefresh=CAN_BE_ANYTHING,则新发布的操作将与更新的对象一起发布。

这仍然不能修复现有操作(它们仍然指向格式错误的对象),但至少这样我可以确保新发布的操作指向刷新的对象。

于 2012-11-07T14:18:59.130 回答
0

首先,您的网页上应该有有关 OpenGraph 的信息。Facebook 会缓存每个 URL 的元信息。如果您共享相同的 URL,Facebook 将使用它已经缓存的信息,即使它已被修改。因此,您应该显式更新 URL 的缓存信息。如果你使用的是 Objective-C,你可以使用下面的代码来更新缓存信息。

iOS,目标-C

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //Example..
    NSString *targetId = @"{The URL for update}";
    [self updateFacebookCache:targetId];
}

- (void)updateFacebookCache:(NSString *)targetId {
    NSString *url = @"https://graph.facebook.com";

    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    [params setObject:targetId forKey:@"id"];
    [params setObject:@"true" forKey:@"scrape"];

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    [manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"success!");
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error: %@", error);
    }];
}
于 2017-02-27T05:29:22.177 回答