我正在使用最新的Facebook iOS SDK将操作发布到Open Graph。
现在,在我的服务器端,我在对象创建中遇到了一个错误,影响了对象的标题。
我现在修复了这个错误 - 我在对象调试工具中对它进行了验证,并且我也可以看到它已修复为我在我的应用中执行操作的新对象。
但是,当我在应用程序上发布操作时,我最初创建的对象在我发布新操作时仍然具有格式错误的标题。
我设法使用Graph API资源管理器找到有问题的对象的ID,但没有删除它的好运(得到"(#3) App must be on whitelist"
例外)。
我怎么能以某种方式强迫对象重新创建?
编辑:
我已尝试将James's answer和this answer中建议的两种方法用于类似的问题,但无法在格式错误的对象上刷新我现有的和新发布的操作。调试器似乎确实创建了一个带有固定数据的抓取对象,但它不会更新原始对象,而是给我一个新对象(我可以看到在“URL API:”URL中的URL中有一个新ID)对象调试器的底部。
编辑:
我终于找到了适合新行动(不是现有行动)的解决方案。请参阅下面的answer。
答案 0 :(得分:2)
使用调试器强制Facebook重新调整URL,以便破坏缓存。您还可以通过添加'scrape = true'作为参数来以编程方式强制重新扫描。有点像...
POST https://graph.facebook.com
id=http://mysite.com/myobject
&
scrape=true&access_token=234876AB6865...
看看是否有帮助
答案 1 :(得分:1)
根据this answer中有关类似问题的建议,我终于想出如果我更改我的iOS应用的代码,则设置FBGraphObject的网址包含:& fbrefresh = CAN_BE_ANYTHING,新发布的操作将与更新的对象一起发布。
这仍然无法解决现有操作(它们仍然指向格式错误的对象),但至少这样我可以确保新发布的操作指向刷新的对象。
答案 2 :(得分:0)
首先,您应该在网页上获得有关OpenGraph的信息。 Facebook为每个URL缓存元信息。 如果您共享相同的URL,Facebook将使用已缓存的信息,即使它已被修改。 因此,您应该显式更新URL的缓存信息。 如果您使用的是Objective-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);
}];
}