삘과 의역으로 범벅된 장담하기 힘든 번역.
원문 : Custom Flash Hide Callback
Custom Flash Hiding Callback
플래시 개발자를 위한 특별 고려사항
- 플래시 어플리케이션을 호스팅한다면 wmode 를 opaque 로 사용할 것을 권장한다.
만약 wmode 를 window 나 direct로 사용한다면, Dialogs , icket flyouts , Chat Tabs ,Notifications 등이 표시될때
캔버스는 플래시오브젝트를 자동적으로 숨기거나 표시한다.
커스터마이징한 플래시객체 숨기기,표시경험을 제공하기 원하는 개발자 는 FB.init 의 hideFlashDCallback 옵션에
자바스크립트함수를 전달 해야 한다.
이 함수는 사용자의 행위(알림창을 클릭하거나 등등)나 의해 플래시 객체가 숨겨지거나 표시될때마다 매번 실행되고
개발자가 적절한 조치(그들의 플래시객체를 숨기거나 표시하는) 를 하기 위해서도 사용할수있다.
그것은 두가지 속성을 포함하는 오브젝트 타입의 파라메터를 받아들인다.
state | 지원하는값 : |
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상에서 아래의 함수
로 초기화를 하게되는데
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 |