앱에서 page에 사진을 올릴때는 page access token이 필요하다

텍스트 feed만 등록할때는 user access token만 있어도 되지만

사진은 반드시 page access token이 필요

이 정보가 없이 업로드 하면

Subject does not have permission to post photos on this page

와 같은 에러가 리턴된다.

전체 에러
사용자 삽입 이미지




user access token 구하기
window.fbAsyncInit = function() {
..........
........
........
      function statusUpdate(response) {
            if(response.status === 'connected') {
                accessToken = response.authResponse.accessToken; // user access token
            }
      }
      FB.getLoginStatus(statusUpdate, true);
}


page access token 구하기 (페이지에 대한 권한도 넘어온다.response 콘솔에 찍어보기)
FB.api('/user_id/accounts', function(response) {
                    accessToken = response.data[0].access_token; // page access token
});
// user_id에 me를 넣으면 본인의 page access token

권한은 publish_stream,publish_actions,manage_pages 가 필요
publish_actions은 없어도 되는것 같은데 확인 안해봄


access token 관련 페이스북 도움말 페이지
https://developers.facebook.com/docs/facebook-login/access-tokens/


Posted by incree

2013/08/08 02:54 2013/08/08 02:54
, , , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/252

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

페이스북 앱 로그인 체크시  not_authorized 가 리턴되면서

로그인 창이 그냥 닫혀 버리는 문제가 발생하는 경우가 있다.

정상적으로 서비스 중인 앱에서는 발생하지 않고,

개발모드인 앱에서만 발생하는데

이때는 Edit App 페이지에서 Sandbox Mode를 Disabled 해주거나

Enabled 상태에서 로그인 체크하려는 회원에게 앱에 대한 권한을 주면 된다.

Enagled 상태는 개발모드이므로....

Edit App 페이지
https://developers.facebook.com/apps/app_id/summary/
(ex : https://developers.facebook.com/apps/664431983586177/summary/)


사용자 삽입 이미지

Posted by incree

2013/08/07 22:44 2013/08/07 22:44
, , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/250

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

    function writeToWall() {
        var message = {
            message : '내 맘대로 평가하는 내 친구의 신용등급은?\r\n이벤트 참여하기 : <?=$_iwtGlobalVariable['facebook']['shortUrl'] ?>\r\n모바일도 참여가능! -> <?=$_iwtGlobalVariable['facebook']['mobileShortUrl'] ?>',
            url : $('imageUrl', paResultXML).text(),
            height : 600
        }
        FB.api('/me/photos', 'post', message, function(response) {
            //console.debug(response);
        });

        $('friendData', paResultXML).each(function(idx, obj) {
            var message = {
                message : '내 맘대로 평가하는 내 친구의 신용등급은?\r\n이벤트 참여하기 : <?=$_iwtGlobalVariable['facebook']['shortUrl'] ?>\r\n모바일도 참여가능! -> <?=$_iwtGlobalVariable['facebook']['mobileShortUrl'] ?>',
                url : $('imageUrl', paResultXML).text(),
                height : 600
            }
            FB.api('/' + $('friendPk', $(obj)).text() + '/photos', 'post', message, function(response) {
                //console.debug(response);
            });
        });
        
        //alert('결과 이미지를 타임라인에 게시하였습니다.');
    }

Posted by incree

2012/10/17 12:22 2012/10/17 12:22
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/165

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

FB.getLoginStatus(function(response){
    if (response.status == "connected"){
        // 로그인 및 권한 획득한 경우 친구목록 가져오기
        FB.api(
            {
                method: 'fql.query',
                query: 'SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())'
            },
            function(response) {
                console.debug(response);                
            }
        );

    }
    else if (response.status == "not_authorized") {
        //권한이 없는 경우
        FB.login(
            function(response) {
                if (response.status == "connected") {
                    
                }
            },
            {
                scope: 'publish_stream'
            }
        );

    }
    else {
        alert ("로그인 후 참여.");
        top.location.href = app_url;
    }
});



페이스북 내에 iframe로 사용하지 않고 별도 페이지로 사용할 경우에는

Website with Facebook LoginSite URL 에 정보를 입력해야 한다

사용자 삽입 이미지


Posted by incree

2012/10/17 12:11 2012/10/17 12:11
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/163

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

1. publish_stream 권한이 있어야 된다.
https://www.facebook.com/dialog/oauth?client_id=380401378675334&redirect_uri=http%3A%2F%2Fwww.increeworks.com%2Ffacebook%2Ftest%2F&state=4b900a018c2f3b19cd709bf6c01a74ed&scope=email,publish_actions,publish_stream

2. 글을쓰는 사람 & 타임라인 주인 모두 권한이 있어야 된다.

3. 둘이 친구여야 된다.


FB.api('/uid/feed', 'post', { message: message }, function(response) {
                   if (!response || response.error) {
}
else {
}
               });

FB.api('/100003323563127/feed', 'post', { message: "Laim Sin님의 응모작에 '좋아요' 를 보내셨습니다. 확인 하러가기!" }, function(response) {
                    console.debug(response);
                });

Posted by incree

2012/06/28 01:50 2012/06/28 01:50
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/137

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[SNS][PHP] 페이스북 페이지 탭 작업

1. 페이스북 앱 개발자 페이지에서 (https://developers.facebook.com/apps)
Create New App 클릭

2. 정보 입력 -
사용자 삽입 이미지

3. 페이지 탭 액티베이트(메뉴에나 오게..) ***
http://www.facebook.com/dialog/pagetab?app_id=YOUR_APP_ID&next=http://facebook.com
YOUR_APP_ID는 2번에서 입력하면 발행된다 그 id를 입력하고
반드시 저  페이지를 실행해 줘야 메뉴에 나오게 된다


4. 페이지 작업 - signed_request ( 페이지 좋아요를 해야 이벤트 참여가능하게 )
php - http://developers.facebook.com/docs/authentication/signed_request/
java - http://www.incree.com/tc/incree/88


5. 캐쉬 삭제 - 페이지 작업시 바로 바로 적용 안되는 경우는 캐쉬를 삭제해 준다
http://developers.facebook.com/tools/debug

6. 이벤트 참여자의 추가 정보를 얻고 싶을 때는 oauth 사용
http://developers.facebook.com/docs/reference/php/facebook-api
권한이 없을 경우 $facebook->getUesr()은 항상 0이 나오는데
로그인 페이지를 통해서 권한을 획득해야 한다.
$facebook->getLoginUrl() 추가 파라미터로 scope에 획득할 권한을
쉼표로 추가해 주면된다

https://www.facebook.com/dialog/oauth?
    client_id=YOUR_APP_ID
   &redirect_uri=YOUR_REDIRECT_URI
   &scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES
   &state=SOME_ARBITRARY_BUT_UNIQUE_STRING

대략 이런 형태

권한은 http://developers.facebook.com/docs/authentication/permissions/ 에서 확인


* ie에서
---------------------------
웹 페이지의 메시지
---------------------------
<br />
<b>Fatal error</b>:  Uncaught Exception: 102: Requires user session
  thrown in <b>/home/increeworks/www/ohmycar/common/include/facebook-php-sdk/base_facebook.php</b> on line <b>1106</b><br />
 : 200 : OK : parsererror
---------------------------
확인  
---------------------------

오류 날때
header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');
http://stackoverflow.com/questions/4467326/facebook-app-works-on-all-browsers-but-not-ie8



** 기타 : 좋아요, 댓글등...
https://developers.facebook.com/docs/plugins/


** 가끔 좋아요가 안 먹힐때
1. 좋아요 누르면 숫자 올라갔다가 다시 돌아오면서 확인으로 바뀌는 경우
대부분 좋아요와 연결된 페이지에 에러가 발생해서 생기는 문제
연결된 페이지에 에러가 없나 확인해보자
위의 캐쉬 삭제 파일에 페이지 주소 넣어보면 쉽게 확인 가능
2. 권한이 있는 페이지인 경우 권한을 허용하지 않으면 에러


** 보내기를 팝업창으로 띄울때
javascript:void(window.open('https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.increeworks.com%2Fpms%2Ffacebook%2Fsamsung%2F20120619%2Fforeignmadecar_share.html', 'sharer', 'width=626,height=436,toolbar=0,status=0'));


** 페이지 탭의 댓글 전체 가져오기
<?php
include '../common/include/basic.lib.php';
include '../common/include/facebook-php-sdk/facebook.php';

$DBCon->DBClose();

$limitNum = 50;

$fbObj = new FaceBook(array('appId' => $_iwtGlobalVariable['facebook']['appId'], 'secret' => $_iwtGlobalVariable['facebook']['appSecret'], 'cookie' => true));
$fbPk =  $fbObj->getUser();

if(!$fbPk) {
    $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' . $app_id . '&redirect_uri=' . urlencode($my_url) ;
    echo("<script>top.location.href='" . $dialog_url . "'</script>");
    exit;
}

$fql = 'SELECT uid,username,first_name,middle_name,last_name,name,birthday,birthday_date,sex,email,pic_small from user where uid = ' . $fbPk;
$userInfo = $fbObj->api(array('method' => 'fql.query', 'query' => $fql));

$access_token = $fbObj->getAccessToken();

// 코멘트 목록 가져오기
$fql = 'select post_fbid,fromid,object_id,text,comments,time from comment where object_id in (select comments_fbid from link_stat where url=\'' . $_iwtGlobalVariable['facebook']['commentUrl'] . '\' limit 0,' .  $limitNum . ') order by time limit 0,' .  $limitNum;
$commentList = $fbObj->api(array('method' => 'fql.query', 'query' => $fql));

// 회원명 가져오기
$fql = 'SELECT uid,name FROM user WHERE uid IN (SELECT fromid from comment where object_id IN (SELECT comments_fbid FROM link_stat WHERE url=\'' . $_iwtGlobalVariable['facebook']['commentUrl'] . '\' limit 0,' .  $limitNum . ') limit 0,' .  $limitNum . ') limit 0,' .  $limitNum;
$memberList = $fbObj->api(array('method' => 'fql.query', 'query' => $fql));
$nameMatchData = array();
foreach($memberList as $data) {
    $nameMatchData[$data['uid']] = $data['name'];
}
?>
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="kor" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="kor" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="kor" xmlns:fb="http://ogp.me/ns/fb#"> <![endif]-->
<html xmlns:fb="http://ogp.me/ns/fb#">
<head>
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, minimum-scale=1.0, user-scalable=yes, target-densitydpi=medium-dpi" />   

<link rel="stylesheet" href="css/common.css">
</head>

<body>
<table BORDER=0 cellpadding="5" cellspacing="0">
    <tr>
        <td>
            <table border="0" cellspacing="0" cellpadding="0" background="/admin/images/title_bg02.gif">
                <tr>
                    <td width="30"><img src="/admin/images/title_bg01.gif" width="30" height="21"></td>
                    <td>댓글 목록</td>
                    <td width="25"><img src="/admin/images/title_bg03.gif" width="25" height="21"></td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table cellspacing="1" style="background-color:#333">
                <tr bgcolor="#DD11DD">
                    <td>No.</td>
                    <td>이름</td>
                    <td>내용</td>
                    <td>날짜</td>
                </tr>
<?
    $totalNum = sizeof($commentList);
    $num = $totalNum;
    foreach($commentList as $key => $data) {
?>
                <tr bgcolor="#FFFFFF">
                    <td><?=++$idx ?></td>
                    <td><?=$nameMatchData[$data['fromid']] ?></td>
                    <td><?=str_replace("\n", "<br />", $data['text']) ?>
<?
        if($data['comments']['count']) {
            echo '
                    <table cellspacing="1" style="background-color:#333">   
                        <tr bgcolor="yellow">
                            <td>No.</td>
                            <td>이름</td>
                            <td>내용</td>
                            <td>날짜</td>
                        </tr>
            ';
            $commentIdx = 0;
            foreach($data['comments']['data'] as $commentKey => $commentData) {
                echo '
                        <tr bgcolor="yellow">
                            <td>' . (++$commentIdx) . '</td>
                            <td>' . $commentData['from']['name'] . '</td>
                            <td>' . $commentData['message'] . '</td>
                            <td>' . date('Y-m-d H:i:s', $commentData['created_time']) . '</td>
                        </tr>
                ';
            }
            echo '
                    </table>
            ';
        }
?>
                    </td>
                    <td><?=date('Y-m-d H:i:s', $data['time']) ?></td>
                </tr>
<?
    }
?>
            </table>
        </td>
    </tr>
</table>
</body>
</html>

Posted by incree

2012/06/20 22:42 2012/06/20 22:42
, , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/132

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

Facebook signed request 파싱하는 api가 없어서

http://www.postitcode.com/post/2991875106/facebook-java-parsing-signed-request

요기를 참고해서 만들어 봤다

입맛에 맞게 약간만 수정했음

JSONObject 는 http://www.json.org/java/index.html 여기 api



Posted by incree

2012/01/19 01:12 2012/01/19 01:12
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/88

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


Notices

Archives

Authors

  1. incree

Recent Trackbacks

Calendar

«   2019/06   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

Site Stats

Total hits:
557532
Today:
170
Yesterday:
177