Unity3D Facebook SDK for Android Integration - 3. 자신의 담벼락에 게시 및 프로필 이미지 출력
유니티3D 안드로이드에 페이스북 초기화, 로그인 로그아웃 연동을 정리했었습니다. 이번에는 아래와 같은 것들을 정리해봅니다.
1. 자신의 담벼락에 글 게시
public void PostToMeWall_U(final String strMsg) {
runOnUiThread(new Runnable(){
public void run() {
Session session = Session.getActiveSession();
final List<string> PERMISSIONS = Arrays.asList("publish_stream");
if (session != null)
{
NewPermissionsRequest reauthRequest = new Session.NewPermissionsRequest(UnityPlayer.currentActivity, PERMISSIONS);
session.requestNewPublishPermissions(reauthRequest);
}
Bundle postParams = new Bundle();
postParams.putString("message", strMsg);
Request request = new Request(session, "/me/feed", postParams,
HttpMethod.POST, requestCallback);
RequestAsyncTask requestAsyncTask = new RequestAsyncTask(request);
requestAsyncTask.execute();
}
});
}
유니티에서 호출하는 자바 함수입니다. publish_stream 권한은 사실 자신의 담벼락에 게시할 때는 필요하지 않은 듯합니다. 자신 이외에 친구들에게 할 때 필요한 듯보이네요. graph api중 하나에 속하는 message를 추가하고 유니티로부터 받은 스트링을 추가합니다. 요청할때는 /me/feed 라고 했는데 밑에서 알아볼 자신의 숫자로된 페이스북 id를 넣어줘도 됩니다. 친구의 id를 넣어주면 친구의 담벼락에 게시가 되겠죠.
요청에 대한 콜백입니다. 로그 정도만 처리하고 있습니다.
FacebookManager 컴포넌트의 추가된 내용입니다. 스트링 변수를 하나 추가해주고 자바 호출을 추가해줍니다.
test facebook post by unity3d라고 입력했습니다.
제 페이스북 담벼락에 게시된 내용입니다. curl로 담벼락에 게시할 때는 한글이 깨졌었는데 유니티에서는 잘 되네요.
2. 자신의 정보를 얻기
자신의 정보를 요청해서 간단히 id와 이름을 출력하는 내용입니다. Request.executeMeRequestAsync를 안쓰고 위 처럼 Request와 Bundle에 직접 graph api 인자들을 넣어서 요청해도 가능합니다. 한가지 접근 api만 있는건 아닌거죠.
3. 자신의 프로필 사진 이미지 출력
페이스북 프로필 이미지를 코루틴과 WWW로 다운받아 Texture2D로 저장하고 출력하는 부분입니다. 전부 GUI 컴포넌트쪽이구요. graph api중 picture인 http://graph.facebook.com/{0}/picture 부분에서 전 제 영문 ID를 바로 넘겨줬는데 위에서 알아낸 숫자 id를 넘겨줘도 됩니다.
이제 빌드 후 실행해보면 위와 같이 페이스북 프로필 사진이 출력됩니다.
다음에는 친구 목록을 얻어와서 친구들의 프로필 사진을 랜덤하게 출력하는 것을 정리해보겠습니다.
- 자신의 정보를 얻기
- 자신의 담벼락에 글을 게시
- 자신의 프로필 사진 이미지 출력
public void PostToMeWall_U(final String strMsg) {
runOnUiThread(new Runnable(){
public void run() {
Session session = Session.getActiveSession();
final List<string> PERMISSIONS = Arrays.asList("publish_stream");
if (session != null)
{
NewPermissionsRequest reauthRequest = new Session.NewPermissionsRequest(UnityPlayer.currentActivity, PERMISSIONS);
session.requestNewPublishPermissions(reauthRequest);
}
Bundle postParams = new Bundle();
postParams.putString("message", strMsg);
Request request = new Request(session, "/me/feed", postParams,
HttpMethod.POST, requestCallback);
RequestAsyncTask requestAsyncTask = new RequestAsyncTask(request);
requestAsyncTask.execute();
}
});
}
유니티에서 호출하는 자바 함수입니다. publish_stream 권한은 사실 자신의 담벼락에 게시할 때는 필요하지 않은 듯합니다. 자신 이외에 친구들에게 할 때 필요한 듯보이네요. graph api중 하나에 속하는 message를 추가하고 유니티로부터 받은 스트링을 추가합니다. 요청할때는 /me/feed 라고 했는데 밑에서 알아볼 자신의 숫자로된 페이스북 id를 넣어줘도 됩니다. 친구의 id를 넣어주면 친구의 담벼락에 게시가 되겠죠.
Request.Callback requestCallback = new Request.Callback() { public void onCompleted(Response response) { JSONObject graphResponse = response.getGraphObject().getInnerJSONObject(); String postId = null; try { postId = graphResponse.getString("id"); } catch (JSONException e) { Log.i("UnityFacebookTest", "JSON error " + e.getMessage()); } FacebookRequestError error = response.getError(); if (error != null) { Log.d("UnityFacebookTest", error.getErrorMessage()); } else { Log.d("UnityFacebookTest", "success post score to wall. " + postId); } } };
요청에 대한 콜백입니다. 로그 정도만 처리하고 있습니다.
public string strPostMsg = string.Empty; public void PostToMeWall(string strMsg) { curActivity.Call("PostToMeWall_U", strMsg); }
FacebookManager 컴포넌트의 추가된 내용입니다. 스트링 변수를 하나 추가해주고 자바 호출을 추가해줍니다.
fYpos += 50; FacebookManager.GetInstance().strPostMsg = GUI.TextField(new Rect(0, fYpos, 300, 50), FacebookManager.GetInstance().strPostMsg); fYpos += 50; if (GUI.Button (new Rect(0, fYpos, 100, 50), "Post") == true) { FacebookManager.GetInstance().PostToMeWall( FacebookManager.GetInstance().strPostMsg ); }GUI 쪽 추가된 내용이구요. 텍스트 입력을 위해 텍스트필드를 추가하고 위에 추가했던 변수에 넣어줍니다. Post를 누르면 페이스북메니저를 통해 자바가 호출되겠지요.
test facebook post by unity3d라고 입력했습니다.
제 페이스북 담벼락에 게시된 내용입니다. curl로 담벼락에 게시할 때는 한글이 깨졌었는데 유니티에서는 잘 되네요.
2. 자신의 정보를 얻기
public void requestMe_U() { runOnUiThread(new Runnable(){ public void run() { Session session = Session.getActiveSession(); Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { // TODO Auto-generated method stub if (user != null) { Log.d("UnityFacebookTest", user.getId()); Log.d("UnityFacebookTest", user.getName()); JSONObject jsonObj = new JSONObject(); try { jsonObj.put(user.getId(), user.getName()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }); } }); }
자신의 정보를 요청해서 간단히 id와 이름을 출력하는 내용입니다. Request.executeMeRequestAsync를 안쓰고 위 처럼 Request와 Bundle에 직접 graph api 인자들을 넣어서 요청해도 가능합니다. 한가지 접근 api만 있는건 아닌거죠.
///< 페이스북 메니져 컴포넌트에 추가 public void RequestMe() { curActivity.Call("requestMe_U"); } ///< GUI 컴포넌트에 추가 fYpos += 50; if (GUI.Button (new Rect(0, fYpos, 100, 50), "Me") == true) { FacebookManager.GetInstance().RequestMe(); }
3. 자신의 프로필 사진 이미지 출력
private Texture2D curDownTex = null; private Texture2D texMe = null; fYpos += 50; if (GUI.Button (new Rect(0, fYpos, 100, 50), "Me") == true) { //FacebookManager.GetInstance().RequestMe(); ///* StartCoroutine(MyPicDown("wwforever80")); //*/ } fYpos += 50; if ( texMe != null ) { GUI.DrawTexture(new Rect(0, fYpos, texMe.width, texMe.height), texMe); } private IEnumerator MyPicDown(string strId) { yield return StartCoroutine( DownPic(strId) ); texMe = curDownTex; } private IEnumerator DownPic(string strFacebookId) { string strPicUrl; strPicUrl = System.String.Format("http://graph.facebook.com/{0}/picture", strFacebookId); WWW www = new WWW(strPicUrl); Debug.Log(strPicUrl); yield return www; if (www.error != null) { Debug.Log("Picture error"); } else { curDownTex = www.texture; //www.LoadImageIntoTexture(curDownTex); Debug.Log(www.url); } }
페이스북 프로필 이미지를 코루틴과 WWW로 다운받아 Texture2D로 저장하고 출력하는 부분입니다. 전부 GUI 컴포넌트쪽이구요. graph api중 picture인 http://graph.facebook.com/{0}/picture 부분에서 전 제 영문 ID를 바로 넘겨줬는데 위에서 알아낸 숫자 id를 넘겨줘도 됩니다.
이제 빌드 후 실행해보면 위와 같이 페이스북 프로필 사진이 출력됩니다.
다음에는 친구 목록을 얻어와서 친구들의 프로필 사진을 랜덤하게 출력하는 것을 정리해보겠습니다.
댓글
댓글 쓰기