본문 바로가기

Facebook

Facebook 번역 - 3. Custom Flash Hiding Callback


삘과 의역으로 범벅된 장담하기 힘든 번역.

원문 : 
Custom Flash Hide Callback

 


Custom Flash Hiding Callback


플래시 개발자를 위한 특별 고려사항 

- 플래시 어플리케이션을 호스팅한다면 wmode 를 opaque 로 사용할 것을 권장한다.

만약 wmode 를 window 나 direct로 사용한다면, Dialogs , icket flyouts , Chat Tabs ,Notifications 등이 표시될때

캔버스는 플래시오브젝트를 자동적으로 숨기거나 표시한다.


커스터마이징한 플래시객체 숨기기,표시경험을  제공하기 원하는 개발자 는  FB.init  의 hideFlashDCallback 옵션에

자바스크립트함수를 전달 해야 한다.


이 함수는 사용자의 행위(알림창을 클릭하거나 등등)나  의해  플래시 객체가 숨겨지거나 표시될때마다 매번 실행되고

개발자가 적절한 조치(그들의 플래시객체를 숨기거나 표시하는) 를 하기 위해서도 사용할수있다.

그것은 두가지 속성을 포함하는 오브젝트 타입의 파라메터를 받아들인다. 


state

지원하는값 :'opened' 혹은 'closed'.

elem

숨겨지거나 표시되는 HTML 요소


custom action은 200ms 이내에 실행완료되야 하며 그렇지 않을 경우 플래시객체는 custom action에 상관없이 숨겨진다.


샘플 구현

function(params) {
  if (params.state == 'opened') {
    // Hide the Flash object
    FB.Canvas.hideFlashElement(params.elem);
  } else {
    // Display the Flash object
    FB.Canvas.showFlashElement(params.elem);
}


위의 예제에서 보여지듯이, 플래시 컨텐츠는  FB.Canvas.hideFlashElement 와 FB.Canvas.showFlashElement 를 통해

수동적으로 숨겨지거나 표시될 수 있다.


---------------------------------------------------------------------------------------------------------------

여기서부터는 번역이 아닌 개인적인 추가글.

1.

위의 글만으로는 아마 설명이 부족함을 느낄 것같다.

모든 페이스북 관련 api 를 사용하기 앞서

sdk는 초기화를 해야 하는데 이때 사용하는 함수가

FB.init 이다.


function onFlashHide(info) {
  if(info.state == 'opened') {
    displayFlashScreenshot();
  } else {
    hideFlashScreenshot();
  }
}

FB.init({
  appId  : 'APP_ID',
  hideFlashCallback : onFlashHide
});


초기화 시 이런식으로 커스텀한 자바스크립트 함수를 넘겨줘야 한다는 의미.


가장 유명한 페이스북 플래시 게임중 하나인 앵그리버드의 경우 Starling 을 사용하여 만들어 졌기 때문에 wmode 를 direct로 

할 수 밖에 없어 각종창에 의해 가려졌을때 플래시화면을 이미지객체로 변환시킨 뒤 화면에 띄우고 플래시객체는 숨기는

커스텀 hideFlashCallback 기능을 구현해놓았다.


이 기능을 구현하고자 할 경우

가장중요한 opend 혹은 closed 상황에서의 요청 처리는 해결하더라도 그시점의 플래시화면을 찍어 html상에 표시하는 문제가 

남아있다.


이방법은 http://developers.facebook.com/blog/post/637/ 에 샘플코드 및 파일과 함께 친절하게 설명 되어있다.

이것 역시 번역 하려고 했으나 as와 js 에 익숙하다면 굳이 글을 읽지 않고 코드만 봐도 이해할 수준이라 패스.

정 모르겠다면 샘플파일을 다운받아 실행시켜 보면 된다.


샘플이 적용된 사례는  http://apps.facebook.com/wickedflashexample/ 이곳에서 확인할 수 있다.



2.

실제 플래시로 개발을 하면서 또다른 난관에 부딪혔는데

모든 페이스북과 의 통신을 자바스크립트로 구현해두고 ExternalInterface 로 호출 및 콜백하면 문제가 없겠지만

as3의 Facebook sdk (http://www.adobe.com/devnet/facebook.html) 를 사용한다면 문제가 생긴다.


해당 sdk에서 지원하는 메소드를 사용하려면 js가 아닌 as상에서 아래의 함수

init(applicationId:String, callback:Function = null, options:Object = null, accessToken:String = null):void
[static] Initializes this Facebook singleton with your Application ID using OAuth 2.0.


로 초기화를 하게되는데


3번째 인자 option 에 flashHideCallback 를 설정할 수가 없다.

as함수를 넘기는게 불가능한 것 같다. js상의 함수를 문자열로 바꿔 넘겨도 실패. 방법을 내가 모르는 건지.


1일차. 어떻게든 as에서 flashHideCallback 를 설정하도록 노력.

> 대삽질.

2일차. js에서 모든 처리를 하고 as는 요청,결과값 반환만 받도록 전체적인 코드 및 프로세스를 수정.

> 엄청난 귀차니즘과 각종  데이터 연동작업이 빡침... 잠깐 방심하면 에러. 그래서 도중에 잠시 스톱.

3일차. 담배피다 해결방법을 떠올림 

>  유레카!


1.플래시삽입후 플래시 내에서 Facebook.init 를 한다.

2. 플래시 Facebook.init 의 2번째인자로 설정한 callback 함수내에서 js 함수 a를 호출

3.js 함수 a에서 FB.init로 flashHideCallback  설정.


플래시에서 Facebook sdk 를 활용하면서 필요한 경우 js 에서도 페이스북 api 를 사용할 수있다.

순서를 바꿀 경우 flashHideCallback  는 무시 되었다. 포인트는 플래시에서 init 후 js에서 init.



'Facebook' 카테고리의 다른 글

페이스북 연동 관련 이것저것  (0) 2012.07.11
Facebook 번역 - 2. tutorial  (0) 2012.07.11
Facebook 번역 - 1. Facebook for Websites  (0) 2012.03.23