2010-06-28 5 views
3

Actionscript 3 API를 사용하여 Flash 기반 (AS3) Facebook Connect 사이트를 만들고 있으며 사용자가 올바르게 로그인 할 수 있도록 기본 FB Connect 기능을 갖추고 있지만, 특정 확장 된 사용 권한을 요청하려고 할 때 벽에 부딪치게됩니다. 나는 긍정적 인 아니에요,하지만 AS3 API에 두 개의 매우 중요한 제한 사항이 있습니다 것처럼 나타납니다Actionscript 3 Facebook API 제한

  1. 당신은 초기 로그인 호출 별도로 확장 된 권한에 대한 메시지를 표시해야하며이. 즉, 하나가 아닌 두 개의 모달 대화 상자가 필요합니다. 이것은 연결이 FacebookSessionUtil의 인스턴스로 처리되기 때문에 확장 권한 요청은 FacebookSessionUtil.Facebook의 인스턴스로 처리되기 때문인 것으로 보입니다.

  2. 사용자가 자신의 이메일 주소를 애플리케이션과 공유하도록 허용하는 방법이없는 것처럼 보입니다. http://facebook-actionscript-api.googlecode.com/svn/release/current/docs/index.html을 완전히 숙독했지만 "이메일"권한처럼 보이는 것은 사용자가 앱이 이메일 주소를 직접 공유하지 않고 페이스 북을 통해 이메일을 보내도록 허용한다는 것입니다.

여기에 내 가정이 잘못 되었습니까? JS 및 ExternalInterface를 사용하여이 작업을 더 잘 수행 할 수 있습니까? 차라리 자리에있는 것을 다시 짓지는 않겠지 만 이러한 한계가 현실이면 다른 선택의 여지가없는 것처럼 보입니다.

의견이나 도움을 주시면 대단히 감사하겠습니다. 감사!

+0

afaik facebook 절대 타사에서 이메일 주소에 액세스하지 못하게하므로 다른 클라이언트 라이브러리가 도움이되지 않습니다. – grapefrukt

+0

grapefrukt - Facebook의 확장 권한 목록에 언급 된 첫 번째 "데이터"항목은 사용자의 기본 전자 메일 주소입니다. http://developers.facebook.com/docs/authentication/permissions – justinbach

답변

1

1) DesktopSession 클래스의 onLogin 함수를 재정의하고 확장 권한 매개 변수를 추가해야합니다.

2) 권한 모델을 변경하면 프록시 된 전자 메일 만 허용되지 않는 한 작동해야합니다. 페이 스북 사용자 인스턴스에서 쿼리하여 시도한 결과를 확인하십시오. 콘솔 블록 여기

<button id="fb-login">Login &amp; Permissions</button> 

<script> 
document.getElementById('fb-login').onclick = function() { 
    var cb = function(response) { 
    Log.info('FB.login callback', response); 
    if (response.session) { 
     Log.info('User logged in'); 
     if (response.perms) { 
     Log.info('User granted permissions'); 
     } 
    } else { 
     Log.info('User is logged out'); 
    } 
    }; 
    FB.login(cb, { perms: 'email' }); 
}; 
</script> 
+0

감사합니다. 1)에서 onLogin 재정의의 특성에 대해 좀 더 구체적으로 설명해 주시겠습니까? onLogin이 일반적인 페이스 북 로그인 URL (http://www.facebook.com/login.php)을 치고 여분의 GET 변수를 그 위에 올려 놓은 것처럼 보입니다. URL에 다른 변수가 필요합니까? – justinbach

+0

예 이메일 확장 권한 매개 변수 :'email' 클래스를 확장하여 클래스를 재정의하려했으나 DesktopSession이 모든 것 위에 있습니다. 그래서 나는 빠른 검색을했고, 나의 생각이 벌써 생각되었다고 알았다 :(.이 젠체하는 사람 [Jozef Chúťka] (http://blog.yoz.sk/2010/01/facebook-extended-permissions-with-authorization-by-overriding-class-in-swc/)에는 얻는 방법에 관한 완전한 자습서가있다 그것은 작동합니다. 그는 기본적으로 그 클래스의 facebook swc와 같은 디렉토리 패턴을 사용하여 클래스를 자신의 src에 복사했습니다. – phwd

+0

사용자가 이미 로그인하지 않은 경우에만 작동합니다. FB Api (당신이 저에게 묻는다면, moronicly)는 실제로 로그인 한 경우에만 response.perms를 채 웁니다. 이미 loggen-in 인 경우 콜백이 호출되지만 perms는 비어 있습니다. 나는 지난 주에 바로이 문제로 고생했습니다. 사용 권한을 반환하지 않는 getUserStatus 메서드가 있습니다. –

1

에서 다음 API 호출로 Developer console

테스트는

이이 코드 당신이 (매우 편리합니다) 당신의 AS3에서 직접 모든 것을 할 수있는 또 다른 방법 게임에서 나는 게임의 특정 지점에서 사용 권한이 필요한 페이스 북에 구축하고 있습니다. 잘 작동합니다. (이제 init 호출에서 channel.html 및 oauth : true를 지정해야합니다.)

먼저 가장 최신 버전의 API가 있는지 확인하십시오 (http://code.google.com/intl/ko/). co.kr/p/facebook-actionscript-api)

private function facebookInit():void  // START THE SESSION… 
{ 
    Facebook.init(APP_ID, facebookInitHandler,{ 
     appId: APP_ID, 
     status: true, 
     cookie: true, 
     xfmbl: true, 
     channelUrl: ‘http://yoursiteurl/channel.html', 
     oauth: true, 
     perms: “publish_stream,email” 
    }); 
} 

private function facebookInitHandler(response:Object, fail:Object):void 
{ 
    if (response.accessToken) 
    { 
     userAccessToken = JSON.encode(response.accessToken); 
     facebookLoggedInWithToken = true; 
     loadProfileData(); 
    } else { 
     facebookLoggedInWithToken = false; 
    } 
} 

private function loadProfileData():void 
{ 
    var request:String = ‘/me’; 
    var requestType:String = ‘GET’; 
    var params:Object = null; 
    Facebook.api(request, loadProfileDataHandler, params, requestType); 
} 

private function loadProfileDataHandler(response:Object, fail:Object):void 
{ 
    if (response) { 
     userID = response.id; 
     fullName = response.name; 
     firstName = response.first_name; 
     lastName = response.last_name; 
     userEmail = response.email; 
     userPicURL = ‘http://graph.facebook.com/‘ + userID + ‘/picture’; 
    } 
} 

즐기십시오!

+0

중요한 부분은 options.status = true입니다. –