2012-11-06 43 views
0

我正在使用最新的Facebook iOS SDK发布动作以打开图形。删除或更改缓存的开放图形对象

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

我现在修复了这个错误 - 我在对象调试器工具中对它进行了验证,同时我也可以看到它修复了我在我的应用程序中执行的新对象。

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

我设法使用图形API资源管理器找到有问题的对象的ID,但没有删除它的运气(得到了"(#3) App must be on whitelist"异常)。

任何想法,我可以以某种方式强制对象重新创建?

编辑:

我试过在James's answerthis answer建议类似的问题这两种方法,但无法得到的格式错误的对象在我现有的和新发布的行动刷新。调试器似乎创建了一个具有固定数据的刮板对象,但它并没有更新原始对象,而是给了我一个新的对象(我可以看到在URLs部分的“Graph API:”URL中有一个新的ID。对象调试器的底部

编辑:。

我终于找到了新的动作(不存在的)工作的解决方案请参见下面answer

回答

1

this answer建议对类似的问题,我终于想通了,如果我改变我的iOS应用的代码来设置的URL FBGraphObject遏制:& fbrefresh = CAN_BE_ANYTHING,新发布的操作与更新的对象一起发布。

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

2

使用调试势力Facebook来刮研。 URL,这样就可以破坏缓存,你也可以通过编写'scrape = true'作为参数来强制重新进行重新存储,例如...

POST https://graph.facebook.com 

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

看看是否有帮助

+0

它似乎刮对象,但它不会改变现有的ID的动作都指向,而是创建一个新的来代替。此对象上的现有操作以及我的应用中的新操作仍然指向旧的格式错误的对象... – yonix

0

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

的iOS,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); 
    }]; 
} 
相关问题