2011-12-12 27 views
3

我们发现了一组奇怪的情况,当我们从iOS应用程序分享到Facebook时,可能会导致错误。我试图弄清楚它是否会成为Facebook对这一系列事件做出回应的方式中的一个错误,或者有可能避免它。在FB.com上删除应用程序后,FB应用程序无法向iOS请求权限

基本上,我们的iOS应用程序不会在用户从FB网站取消权限后重新询问权限。我们预计我们的应用会重新提问,但它会尝试共享内容,然后通过一般错误消息失败。用户没有机会再次授予权限。

确切组情况:

  1. 用户想要分享iOS应用的内容,连接到它的FB应用程序请求的权限,和一切正常。
  2. 用户使用FB.com应用程序设置从应用程序中移除应用程序。
  3. 用户再次从iOS应用程序共享内容,FB应用程序提交,但然后返回错误,而不是重新请求权限。

杰里米

+0

Facebook iOS SDK和API是一件垃圾。不幸的是,这是您尝试在比通常情况下使用API​​时可能遇到的许多问题之一。 – Rog

回答

2

测试人员想通了,他们没有给应用程序有足够的时间来清除设备上的缓存,这样有上的权限之间的不匹配设备和Facebook上的权限。

此前,他们会删除FB.com的权限,然后立即尝试从iOS应用程序共享。现在,他们报告说,如果他们等了一个小时,应用程序通常会重新请求权限。

谢谢!

0

我不知道是什么原因导致你的问题,但我可能有一个变通方法您:在高级应用程序设置设置一个取消授权回调URL。通过这种方式,您可以捕捉每个取消授权您的应用的用户,并将其保存到您的数据库或任何其他用户。网址可以链接到一个PHP文件看起来像下面这样:

<?php 

$secretKey = "APP_SECRET_KEY"; 
$data = parse_signed_request($_REQUEST['signed_request'], $secretKey); 
$fbUserId = $data['user_id']; 
// do with the user id whatever you want 

function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
     error_log('Unknown algorithm. Expected HMAC-SHA256'); 
     return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
     error_log('Bad Signed JSON signature!'); 
     return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

?>