Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Facebook访问令牌会更改每次访问?_Java_Facebook_Facebook Graph Api_Facebook Access Token_Restfb - Fatal编程技术网

Java 为什么Facebook访问令牌会更改每次访问?

Java 为什么Facebook访问令牌会更改每次访问?,java,facebook,facebook-graph-api,facebook-access-token,restfb,Java,Facebook,Facebook Graph Api,Facebook Access Token,Restfb,我们正在使用restFB 1.6.12。我通过两种方式获得facebook访问令牌 1. CLIENT_APP_ID = "XXXXXXXXXXXXXXXXXX"; CLIENT_SECRET = "XXXXXXXXXXXXXXXXXX"; REDIRECT_URL = "XXXXXXXXXXXXXXXXXX"; AUTH_CODE = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; SCOPE = "email,read_stream";

我们正在使用restFB 1.6.12。我通过两种方式获得facebook访问令牌

1. CLIENT_APP_ID = "XXXXXXXXXXXXXXXXXX"; 
   CLIENT_SECRET = "XXXXXXXXXXXXXXXXXX"; 
   REDIRECT_URL  = "XXXXXXXXXXXXXXXXXX";
   AUTH_CODE = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
   SCOPE = "email,read_stream";

    Redirect to facebook as the example. As a result I'll get an
    authorization code  
    https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream

    asking for an access_token using,

    https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

    this returns the access token like this,

    access_token=CAAHWfjdHDKcBAIL0zHMeJKzJw8Ug7WrrrkNxpBnK7ubnFR1RGtIIZA7T3UPlhCSV0hPJXZAgTcKfBSfHZAyxsndc3RT72XMREjACxnGb0ZCGMZAUgDWH3FgOhnaoSBMgkaQBPDOCCEKcLnznMYSncWS7dVxl9IFrSzeFjF6LKOWB3NTynl5X1&expires=5125218

 2. AccessToken accessToken = new
    DefaultFacebookClient().obtainAppAccessToken(appid,appsecret);
    String token=accessToken.getAccessToken();

    It reurns the access token like this,

    access_token=517312558337191|5oHY9T3cZICO_TCeK8OdXKg5Y08
如果我使用第一(1)个,在每次访问都抛出错误之后,第一次访问可以正常工作

Auth Token= {"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
com.restfb.exception.FacebookOAuthException: Received Facebook error response of type OAuthException: (#200) Must have a valid access_token to access this endpoint
    at com.restfb.DefaultFacebookClient$DefaultGraphFacebookExceptionMapper.exceptionForTypeAndMessage(DefaultFacebookClient.java:766)
    at com.restfb.DefaultFacebookClient.throwFacebookResponseStatusExceptionIfNecessary(DefaultFacebookClient.java:688)
    at com.restfb.DefaultFacebookClient.makeRequestAndProcessResponse(DefaultFacebookClient.java:630)
    at com.restfb.DefaultFacebookClient.makeRequest(DefaultFacebookClient.java:592)
    at com.restfb.DefaultFacebookClient.makeRequest(DefaultFacebookClient.java:556)
    at com.restfb.DefaultFacebookClient.fetchConnection(DefaultFacebookClient.java:219)
如果我使用第二(2)个,它只对publicSearchMessages有效,但当我访问publicEvents或其他搜索时,它会抛出一个错误

Auth Token= {"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
com.restfb.exception.FacebookOAuthException: Received Facebook error response of type OAuthException: (#200) Must have a valid access_token to access this endpoint
    at com.restfb.DefaultFacebookClient$DefaultGraphFacebookExceptionMapper.exceptionForTypeAndMessage(DefaultFacebookClient.java:766)
    at com.restfb.DefaultFacebookClient.throwFacebookResponseStatusExceptionIfNecessary(DefaultFacebookClient.java:688)
    at com.restfb.DefaultFacebookClient.makeRequestAndProcessResponse(DefaultFacebookClient.java:630)
    at com.restfb.DefaultFacebookClient.makeRequest(DefaultFacebookClient.java:592)
    at com.restfb.DefaultFacebookClient.makeRequest(DefaultFacebookClient.java:556)
    at com.restfb.DefaultFacebookClient.fetchConnection(DefaultFacebookClient.java:219)
我的问题是,这两个访问令牌之间的区别是什么?如何以编程方式为第一个令牌生成访问代码,以使用publicSearchMessages、getPublicEvents和其他搜索


哪一个访问令牌按预期工作?

访问令牌允许用户以安全和社交的方式与您的应用程序交互。虽然我们正在通过应用程序仪表板中的迁移设置删除脱机访问权限的使用,但我们现在允许选项使用有效期较长的访问令牌,用户每次重新访问您的应用程序时都可以续订访问令牌

当用户使用现有的有效短期用户访问令牌访问您的站点时,您可以选择延长该访问令牌的过期时间。 每天延长一次过期时间,因此即使用户每天多次访问您的站点,令牌也会在第一次请求时延长。您必须确保在短期访问令牌过期之前调用下面的新端点。 使用下面的新端点,您将能够延长现有的、未过期的、短期用户访问令牌的过期时间

要获取长寿命用户访问令牌,只需将您自己的客户机id(您的应用程序id)、应用程序机密和未过期的短命访问令牌传递给端点即可。将向您返回一个新的长期用户访问令牌;除了传递到端点的短期访问令牌之外,还将存在此访问令牌

简言之,获得一个令牌——这些令牌不会因默认而过期;而且一定要有一个

您可以访问facebook文档了解更多信息

要获取扩展页面访问令牌,请将用户访问令牌交换为长寿命令牌,然后请求页面令牌。这个页面的“扩展”令牌实际上没有任何到期时间


通过执行curl请求并在代码中手动保存“页面访问令牌”来解决此问题。访问令牌允许用户以安全和社交的方式与您的应用程序交互。虽然我们正在通过应用程序仪表板中的迁移设置删除脱机访问权限的使用,但我们现在允许选项使用有效期较长的访问令牌,用户每次重新访问您的应用程序时都可以续订访问令牌

当用户使用现有的有效短期用户访问令牌访问您的站点时,您可以选择延长该访问令牌的过期时间。 每天延长一次过期时间,因此即使用户每天多次访问您的站点,令牌也会在第一次请求时延长。您必须确保在短期访问令牌过期之前调用下面的新端点。 使用下面的新端点,您将能够延长现有的、未过期的、短期用户访问令牌的过期时间

要获取长寿命用户访问令牌,只需将您自己的客户机id(您的应用程序id)、应用程序机密和未过期的短命访问令牌传递给端点即可。将向您返回一个新的长期用户访问令牌;除了传递到端点的短期访问令牌之外,还将存在此访问令牌

简言之,获得一个令牌——这些令牌不会因默认而过期;而且一定要有一个

您可以访问facebook文档了解更多信息

要获取扩展页面访问令牌,请将用户访问令牌交换为长寿命令牌,然后请求页面令牌。这个页面的“扩展”令牌实际上没有任何到期时间


通过执行curl请求并在代码中手动保存“页面访问令牌”来解决此问题

对于您尝试使用的API来说,该令牌的范围可能太窄。确定。但是为什么每次访问都要更改访问代码???该令牌的范围对于您尝试使用的API来说可能太窄了。好的。但是为什么每次访问都要更改访问代码???