Facebook 탭앱 관리를 Graph API를 사용해서 하고 있었는데,

잘되던 탭앱 custom_name, custom_image_url 수정이 어느날부터 갑자기 에러가 나기 시작했다.

에러는 다음과 같았다.

[error] => Array
(
[message] => (#210) Subject must be a page.
[type] => OAuthException
[code] => 210
)

해결은 파라미터에 추가로 access_token을 넘겨줘서 처리했다.

기존에는 따로 안 넘겨줘도 잘 작동했었는데, 왜 어느날 갑자기 바뀐걸까?

처음 개발하면서 테스트 해봤을때 access_token을 넘겨주나 안 넘겨주나 똑같이 잘 작동해서

curl시에 api에서 알아서 access_token을 추가해서 처리하는 줄 알았는데, 그게 아닌가보다

수정전
$postArray = array('custom_name' => $custom_name);
$fbObj->api('/' . $pageId. '/tabs/app_' . $tabappId, 'POST', $postArray);
===============>
수정후
$postArray = array('custom_name' => $custom_name, 'access_token' => $pageAccessToken);
$fbObj->api('/' . $pageId. '/tabs/app_' . $tabappId, 'POST', $postArray);

Posted by incree

2014/07/25 11:40 2014/07/25 11:40
, , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/343

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

구글 캘린더 목록 가져오기

Google APIs Client Library for PHP download

<?php
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';

$client = new Google_Client(); 
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setScopes(array('https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/calendar'));

$cal = new Google_Service_Calendar($client);

$calList = $cal->calendarList->listCalendarList();
    $_SESSION['token'] = $client->getAccessToken();

    $items = $calList->getItems();
    $itemsLen = sizeof($items);

    for($i = 0; $i < $itemsLen; ++$i) {
        echo $items[$i]['id'], ' : ' . $items[$i]['summary'], '<br />';
    }
?>



$client_id = '<YOUR_CLIENT_ID>';
 $client_secret = '<YOUR_CLIENT_SECRET>';
 $redirect_uri = '<YOUR_REDIRECT_URI>';
/*
위 세 변수 값은 Google Developers Console에서 프로젝트 선택후
APIS & AUTH -> Credentials 에서 OAuth 의 Create New Client ID 클릭해서 생성하면 된다.
*/

사용자 삽입 이미지

Posted by incree

2014/07/07 15:02 2014/07/07 15:02
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/338

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

api 문서의 예제가 전부 옛날거라서

직접 라이브러리 분석해서 처리한 방법

정상적인 방법인지는 모르겠지만, 등록은 잘 된다.

구글 캘린더 일정 등록하기

Google APIs Client Library for PHP download

<?php
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->setScopes(array('https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/calendar'));

$cal = new Google_Service_Calendar($client);

$calendarId = ''; //
$targetDate = '2014-07-07';
$tDate = new Google_Service_Calendar_EventDateTime();
$tDate->setDate($targetDate);
   
$body = new Google_Service_Calendar_Event();
$body->setSummary($cTitle);  // 일정 제목
$body->setStart($tDate); // 일정 시작
$body->setEnd($tDate); // 일정 종료
   
$cal->events->insert($calendarId, $body);
?>







$client_id = '<YOUR_CLIENT_ID>';
 $client_secret = '<YOUR_CLIENT_SECRET>';
 $redirect_uri = '<YOUR_REDIRECT_URI>';
/*
위 세 변수 값은 Google Developers Console에서 프로젝트 선택후
APIS & AUTH -> Credentials 에서 OAuth 의 Create New Client ID 클릭해서 생성하면 된다.
*/

사용자 삽입 이미지

Posted by incree

2014/07/07 14:54 2014/07/07 14:54
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/337

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

구글 캘린더가 처음 나왔을때 몇년 사용하다 아이폰 사면서 기본으로 제공되는 캘린더 앱을 사용했었는데,

요즘 다시 구글 캘린더를 사용하게 됐다.

구글 캘린더의 가장 아쉬운 점이 음력 일정을 입력할 수 없다는 건데,

이 부분은 api를 이용해서 구현해 놓은 곳이 있다.

http://googlelunar.cpueblo.com/

하지만 일정의 반복 설정등을 할 수 없어서 여전히 불편하기는 하다.

이 부분은 구글에서 제공해 주지 않으면 처리하기가 힘들지 않을까 싶다.

개인적으로 그 다음 있었으면 하는 기능이 D-day 기능인데,

이건 찾아봐도 구글 캘린더 기본 기능에도 없는 것 같고, 구현해 놓은것도 못 찾았다.

해서 그냥 만들기로 했다.

캘린더 API(https://developers.google.com/google-apps/calendar/?hl=ko)에 있는 라이브러리와 예제 소스가 전부 예전 버젼이라

구현하는데 좀 애를 먹긴 했지만, 완성하고 나니 제법 쓸만하다.

물론 귀찮아서 아주 기본적으로 딱 필요한 것만 구현했다.

피드백이 있다면....시간내서 기능을 보강할 수도....


사용은 여기로~~
구글 캘린더 D-day 등록하기(http://www.incree.com/gCalendar/)

사용자 삽입 이미지
완전 허접한 화면 스샷

Posted by incree

2014/07/07 14:49 2014/07/07 14:49
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/336

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

[PHP] source file encode, decode



Posted by incree

2014/05/07 06:44 2014/05/07 06:44
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/328

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

mysql user defined global variables

기본으로 제공하는 mysql 기능에는 global 사용자 변수를 설정할 수 없다.

udf로 처리해야 한다.

https://github.com/jedisct1/MySQL-global-user-variables-UDF

Posted by incree

2014/05/07 00:22 2014/05/07 00:22
, , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/327

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

[Android] short array to byte array

public byte[] shortArray2byteArray(short[] shortArray) {
    int shortArraySize = shortArray.length;
    byte[] byteArray = new byte[shortArraySize * 2];
    for (int i = 0; i < shortArraySize ; i++) {
        byteArray [i * 2] = (byte) (shortArray[i] & 0x00FF);
        byteArray [(i * 2) + 1] = (byte) (shortArray[i] >> 8);
    }
    return byteArray ;
}

Posted by incree

2014/04/28 05:07 2014/04/28 05:07
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/326

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

[Android] TextToSpeech 버그(??)

TextToSpeech를 이용해서 앱을 개발하고 있는데,

영어 문장을 읽는데, 꼭 한국 사람이 영어 말하는 것처럼 발음이 재생됐다.

onInit 에서

if (tts.isLanguageAvailable(Locale.US) == TextToSpeech.LANG_AVAILABLE)
                tts.setLanguage(Locale.US);
로 언어를 세팅하는 코드를 넣었는데, 이 부분이 정상적으로(?) 작동하지 않았다.

조건문의 isLanguageAvailable 가 0을 리턴해야 정상적으로 실행이 되는데,

1이 리턴되었다.

인터넷 열심히 뒤져서 가져다 쓴 코든데,코드가 잘못 되었다.

아래 doc 문서 보면 위와 같이 사용해도 정상 작동해야 되는데,

http://developer.android.com/reference/ ··· ale.html
public static final Locale US Locale constant for en_US.

버그인지 아니면 폰의 특성을 타는지 정상작동하지 않았다.

Locale enUs = new Locale("en_US");
            if (tts.isLanguageAvailable(enUs) == TextToSpeech.LANG_AVAILABLE)
                tts.setLanguage(enUs);

이렇게 수정해야 정상작동 되었다.

문서상으로는 둘다 같은 코드인데......

왜 아래만 작동할까? 버그일까?



Posted by incree

2014/04/22 01:18 2014/04/22 01:18
, , , , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/325

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

SELECT click_count,comment_count,comments_fbid,like_count,share_count,total_count FROM link_stat WHERE url ='https://developers.facebook.com/docs/reference/fql/link_stat/'


https://developers.facebook.com/docs/reference/fql/link_stat/

Posted by incree

2014/02/28 11:40 2014/02/28 11:40
, , , , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/321

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

1. script tag는 </body> 바로 전에 놓는다.(야후 성능 연구팀의 자바스크립트 제1원칙)
http://developer.yahoo.com/performance/rules.html#js_bottom
http://doublegintonic.tistory.com/123

2. script 갯수를 최소로 줄인다(야후 콤보핸들러 등 사용)

3. link tag 다음에 inline script를 사용하지 않는다.

4. LazyLoad or labjs를 사용하여 script를 동적으로 loading한다
https://github.com/rgrove/lazyload
http://labjs.com/

5. 두번 이상 사용할 전역변수는 지역변수에 할당한다.

6. with 문은 절대 사용하지 않는다. - scope chain 문제

7. try-catch 문은 꼭 필요한 곳만 사용하고 catch문 내의 코드를 최소화 하며
가능하면 메서드를 생성해서 에러 처리를 위임하는게 좋다.

8. eval은 꼭 필요할때만 사용한다.

9. 두번 이상 사용할 중첩 객체 멤버는 지역변수에 할당한다.
(객체 메소드는 제외 - 메소드의 this가 오작동 할 수 있기 때문)

10. DOM은 가장 적게 사용하고, 가능하면 모든 작업을 ECMAScript로 한다.
 - DOM 강의하시는 분 얘기로는 DOM이 더 빠르다고 한다. 어느게 맞는지는 잘...

11. 이벤트 위임(부모 요소로)을 이용해서 이벤트 핸들러 수를 최소한으로 줄인다

12. AJAX 사용시 가능하면 jsonp를 사용하고 부득이한 경우 json을 사용한다.(xml 비추)

13. 개체생성은 리터럴 사용(var a = [1,2,3]; var b="aaa";var c={"a":"b"})
   - 배열값 할당은 []사용(a[0] = 1; push() 사용금지)

14. 정규표현식 최적화

Posted by incree

2014/02/21 10:32 2014/02/21 10:32
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/320

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

« Previous : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : ... 13 : Next »

Notices

Archives

Authors

  1. incree

Recent Trackbacks

Calendar

«   2017/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:
409967
Today:
150
Yesterday:
150