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를 넣어주면 친구의 담벼락에 게시가 되겠죠.


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를 넘겨줘도 됩니다.

 이제 빌드 후 실행해보면 위와 같이 페이스북 프로필 사진이 출력됩니다.

 다음에는 친구 목록을 얻어와서 친구들의 프로필 사진을 랜덤하게 출력하는 것을 정리해보겠습니다.

댓글

이 블로그의 인기 게시물

라즈베리파이 라즈비안 한글 입력하기 - IBus

라즈베리파이 라즈비안 한글 깨짐 수정하기

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.