Facebook 오프라인 액세스 단계별
업데이트 : Facebook
offline_access
권한이 더 이상 사용되지 않습니다. 자세한 내용은 공식 문서 를 참조하십시오.
당신은 때까지해야 2012년 5월 1일 이 설정이 비활성화되는 날짜. 자세한 내용은 개발자 로드맵 을 참조하십시오.
페이스 북과 구글에서 문자 그대로 하루를 검색 한 후, 겉보기에 간단한 일을 할 수있는 최신 작업 방법을 찾으십시오 .
나는 페이스 북 앱 사용자를 위해 offline_access를 얻고이 (세션 키)를 사용하여 브라우저 친구 및 프로필 데이터가 아닌 오프라인을 검색하는 단계별 설명을 찾고 있습니다.
Fb Java API에서이 작업을 수행하는 것이 좋습니다.
감사.
네, 저는 페이스 북 위키를 확인했습니다.
업데이트 : 누구?
이것 : http://www.facebook.com/authorize.php?api_key=<api-key>&v=1.0&ext_perm=offline_access
offline_Access를 제공하지만 session_key를 검색하는 방법은 무엇입니까?
왜 페이스 북은 간단한 문서화를 할 수 없습니까? 600 명 정도의 사람들이 그곳에서 일하고 있다는 뜻입니까?
겉보기에 동일한 질문 : Facebook 에서 작업 할 offline_access 얻기 세션 키 검색 방법에 대한 답변이 없습니다.
편집 : 나는 여전히 그것에 붙어 있습니다. 아무도 아직 그런 일괄 액세스를 시도하지 않은 것 같습니다 ...
새로운 Facebook Graph API를 사용하면 작업이 조금 더 간단 해졌지만 문서화가 훨씬 덜되었습니다. 다음은 서버 측에서만 (브라우저 세션의 일부가 아님) PHP 스크립트에서 내 벽 게시물을로드 할 수 있도록하기 위해 수행 한 작업입니다.
이 프로젝트에 사용할 수있는 페이스 북 애플리케이션이 아직 없다면
http://www.facebook.com/developers/apps.php#!/developers/createapp.php
샌드 박스 / 개발자 모드를 켜십시오! @ 고급 설정> 샌드 박스 모드> 사용 (애플리케이션의 개발자 만 볼 수 있음) 해당 애플리케이션의 개발자 계정 요약에 나열되어있는 애플리케이션 ID (APP_ID) 및 비밀 키 (SECRET_KEY)가 필요합니다. 이전 API 키.브라우저에서로드하고 서버 측 앱에 연결할 계정으로 fb에 이미 로그인 한 다음 요청 된 권한에 대해 "허용"을 클릭합니다.
https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.facebook.com/connect/login_success.html
결과 URL의 쿼리 문자열에서 "code"매개 변수를
https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=APP_SECRET&code=CODE_FROM_2
복사하고 다음에서 사용합니다. 그리고 결과 페이지의 텍스트에서 access_token =의 오른쪽을 복사합니다 . 다음 과 같은 구조가됩니다. APP_ID | HEXNUM-USER_ID | WEIRD_KEY이제 방금받은 선서 액세스 토큰을 사용하여 그래프 API 또는 클래식 나머지 API에서 다운로드합니다 (여기서 SOURCE_ID는 사용자 / 그룹 / 찾고있는 모든 항목의 페이스 북 ID입니다).
<?php $stream = json_decode(file_get_contents("https://api.facebook.com/method/stream.get?source_ids=SOURCE_ID&access_token=ACCESS_TOKEN&format=json")); var_dump($stream); // this one gives a 500 internal server error from the http get if any of the fields are invalid, but only in php, not when loaded in a browser... weird. $feed = json_decode(file_get_contents("https://graph.facebook.com/SOURCE_ID/feed?fields=id,from,created_time,link,type&access_token=ACCESS_TOKEN")); var_dump($feed); ?>
그래프 api와 rest api가 다른 구조뿐만 아니라 다른 정보를 반환한다는 점에 주목하세요. 그래서 여기에서는 새 그래프의 필드를 제한 할 수있는 것을 좋아하더라도 나머지 api (첫 번째)의 결과를 선호합니다. api (두 번째).
에서 봐 http://developers.facebook.com/docs/authentication/ 섹션에서 공식 (스파 스) 자세한 내용 및 "웹 응용 프로그램에서 인증하는 사용자", "확장 된 권한 요청".
이 작업을 일상적으로, 즉 프로그래밍 방식으로 수행하려면 2 + 3 단계의 자동화 된 버전이 있습니다.
이것을 웹 서버에 "facebook_access_token.php"로 넣으십시오.
<?php $token = explode('=', file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://$_SERVER[SERVER_NAME]$_SERVER[PHP_SELF]&client_secret=APP_SECRET&code=" .
(get_magic_quotes_gpc() ? stripslashes($_GET['code']) : $_GET['code'])));
echo $token[1];
// store this, the access token, in the db for the user as logged in on your site -- and don't abuse their trust! ?>
브라우저의 사용자를 다음으로 안내합니다. https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.example.com/facebook_access_token.php
마지막으로 PHP를 사용하고 싶다면 Facebook PHP SDK v3 ( github 참조 )으로 매우 간단합니다. offline_access
권한 이있는 사람을 로그인하려면 로그인 URL을 생성 할 때 요청합니다. 방법은 다음과 같습니다.
오프라인 액세스 토큰 받기
먼저 사용자가 로그인했는지 확인합니다.
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
그렇지 않은 경우 offline_access
권한을 요청하는 "페이스 북으로 로그인"URL을 생성합니다 .
if (!$user) {
$args['scope'] = 'offline_access';
$loginUrl = $facebook->getLoginUrl($args);
}
그런 다음 템플릿에 링크를 표시합니다.
<?php if (!$user): ?>
<a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
그런 다음 오프라인 액세스 토큰을 검색하여 저장할 수 있습니다. 그것을 얻으려면 다음으로 전화하십시오.
if ($user) {
$token = $facebook->getAccessToken();
// store token
}
오프라인 액세스 토큰 사용
사용자가 로그인하지 않은 경우 오프라인 액세스 토큰을 사용하려면 다음을 수행하십시오.
require "facebook.php";
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
));
$facebook->setAccessToken("...");
이제이 사용자에 대해 API 호출을 할 수 있습니다.
$user_profile = $facebook->api('/me');
도움이 되길 바랍니다!
I did a tutorial not too long ago on my blog. It doesn't require any plugins or whatnot, it is done in PHP, and I have tested it. I did it for mainly wall posts, but after you authenticate you can use whatever function you want.
EDIT: Post no longer exists. FB API is updated anyway...
You want to start by reading the Server Side Flow section in the authentication guide. Basically, start with this URL:
https://www.facebook.com/dialog/oauth
Add your application id (available here) to the URL, which in OAuth parlance is client_id
:
https://www.facebook.com/dialog/oauth?client_id=184484190795
Add the offline_access
permission or scope
in OAuth parlance:
https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access
Add a redirect_uri
which is where Facebook will redirect to after the user completes the authorization step ("Allow" or "Dont Allow", look at docs for response format or just try it out):
https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access&redirect_uri=https%3A%2F%2Ffbrell.com%2Fecho
If you follow the link above, it will take you to a prompt, and then upon clicking Allow/Dont Allow it'll take you to a page that "echos" back the request. If you click Allow, you'll get a code
parameter back, which you can exchange for an access_token
by making an HTTP request to Facebook from your server, which does something along the lines of this:
https://graph.facebook.com/oauth/access_token?client_id=184484190795&client_secret=XXX&code=YYY&redirect_uri=ZZZ
You need to pass in your client_id
, your application secret must be passed in as the client_secret
, the same redirect_uri
as you used earlier and the code
you received as the response. This will return the offline_access
enabled access_token
for that user.
One thing to keep in mind though is that even if you request offline_access
your application must gracefully handle invalid or expired access_tokens, as that can happen for various reasons.
I know two solutions: Java and JavaScript
Java : a. servlet code (don't forget to import relevant jar's) :
String url="http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0";
url+="&fbconnect=true&return_session=true&req_perms=offline_access,status_update";
url+="&next=http://YOUR_FaceBookCallback_SERVLET";
response.sendRedirect(url);
return;
//You will get prompt to log in to facebook and permit the extended permissions
b. Don't forget to define your ConnectUrl(in your facebook account application) as http://YourUrlFromWhereDoYouTurnToTheServletAbove
c. make another servlet : YOUR_FaceBookCallback_SERVLET (see above) with this code:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String session = request.getParameter("session");
//from this string you can obtain your infinite session_key.In order to do this, parse this string as JSON.
//Save it in the database or in the other data storage
response.sendRedirect(ThePlaceThatYouWant);}
d. Use this secret session_key like this:
FacebookXmlRestClient client = new FacebookXmlRestClient(YOUR_API_KEY, FACEBOOK_APPLICATION_SECRET,SECRET_SESSION_KEY);
client.setIsDesktop(false);
client.users_setStatus("YourMessage");
If anybody wants the JavaScript solution(the big hole in security) write me
I figured out how to "retrieve" the offline access infinite session key after a lot of hair-splitting, some trial and error & wondering about all the other productive ways I could have spent that time... agree facebook documentation could be a lot better
1) If you are using the facebook-java-api.. then take a look at the facebook demo site for "mobile web" on how to format the URL for requesting offline access
http://itsti.me/index.php
<a href="http://www.facebook.com/connect/prompt_permissions.php?api_key=YOUR_API_KEY&ext_perm=publish_stream%2Coffline_access&next=http%3A%2F%2Fmysite%2Ffacebookconnect&cancel=http%3A%2F%2Fmysite%2Fhome&display=wap"><img alt="Connect" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif" id="fb_login_image"/></a>
2) As to how get the offline session key from the session..The trick is : when facebook redirects the user to the "next" url right after granting offline access, you should get the facebook session "again"..this new session will have the infinite session key.
here is an example for mobile web...you should be able to figure it out for a regular website.The auth_token is used only for mobile web sites.. you may not need it for a regular web site
FacebookJsonRestClient fbc = new FacebookJsonRestClient(MY_API_KEY, SECRET, sessionKey);
String auth_token = request.getParameter("auth_token");
System.out.println("infinite session kEY = " + fbc.auth_getSession(auth_token));
For session access, i had to use the loginurl provided by the facebook php api, as there seem to be 2/3 additional variables that it sends in the auth request, including return_session and session_version. Also the new php5-sdk sends the request to login.facebook.com instead of https://graph.facebook.com/oauth/authorize. Here's how i worked it out :
$b=new facebook(array('appId'=>APP_ID,'secret'=>SECRET))
To ask for authentication :
$facebook->getLoginUrl(array('next'=>$redirect_uri,'req_perms'=>$scope))
Rember to include offline_access in $scope. Once you are redirected to this page (after logging in to fb, and granting permissions), you will have a $_GET['session'] in json format.
Just store it wherever you want (I do it in a database). The next time you wish to do something with the user's account, just use the following:
$session = json_decode($db->query("SELECT ..."));//get session from db $this->facebook->setSession($session);
After this any requests that the api makes will be via this user's access.
The worst thing about the current facebook graph api is (correct me if I'm wrong) that the current api neglects the session (which seems to be a remain from the old api) in all its documentation and only talks about the access_token. But the current api (php5-sdk) has got no feature to send an actual request using only the access_token. If there is a function to start a session a session using only the access_token, I'm not aware of it.
ReferenceURL : https://stackoverflow.com/questions/1059640/facebook-offline-access-step-by-step
'IT story' 카테고리의 다른 글
RESTful 서비스를 디버깅하는 방법은 무엇입니까? (0) | 2020.12.25 |
---|---|
목록을 노출하는 것이 나쁜 것으로 간주되는 이유 (0) | 2020.12.25 |
해시 코드 계산을위한 합리적인 소수는 무엇입니까? (0) | 2020.12.25 |
log4net에서 프로그래밍 방식으로 버퍼를 플러시하는 방법이 있습니까? (0) | 2020.12.25 |
Java에서 부울 "작업 순서"는 무엇입니까? (0) | 2020.12.25 |