"안드로이드 MyFacebookApp 프로젝트 1"의 두 판 사이의 차이

91번째 줄: 91번째 줄:
:→ 다른 기기(실제기기든 가상기기든)에서 실행해도 KeyHash 값은 같다.
:→ 다른 기기(실제기기든 가상기기든)에서 실행해도 KeyHash 값은 같다.
:→ 다른 프로젝트에서도 KeyHash 값은 같다.
:→ 다른 프로젝트에서도 KeyHash 값은 같다.
KeyHash 값은 컴파일하는 컴퓨터에서 생성되는 값이기 때문에 그렇다.
KeyHash 값은 컴파일하는 컴퓨터에서 생성되는 값이기 때문에 기기 또는 프로젝트와는 무관하다.
이 값을 페이스북에 입력해야 하므로 잘 기억해두자.
이 값을 페이스북에 입력해야 하므로 잘 기억해두자.



2013년 1월 13일 (일) 20:20 판

안드로이드 MyFacebookApp 프로젝트

1 사전 작업

2 새 프로젝트

  • File --- New --- Android Application Project
  • "New Android Application" --- Application Name: My Facebook App[1] --- [Next >]
  • "Configure Project" --- [Next >]
  • "Configure Launcher Icon" --- [Next >]
  • "Create Activity"[2] --- [Next >]
  • "New Blank Activity" --- [Finish]

FacebookSDK를 라이브러리로 지정

  • Package Explorer --- MyFacebookApp 우클릭 --- Properties
  • "Properties for MyFacebookApp" --- Android --- "Library" --- [Add...]
  • "Project Selection" --- FacebookSDK 선택 --- [OK]
  • [OK]

그러면 Problems 창과 Console 창에 오류메시지가 나타난다.

Problems
Jar mismatch! Fix your dependencies	MyFacebookApp		Unknown	Android
Console
[2013-01-13 11:33:31 - MyFacebookApp] Found 2 versions of android-support-v4.jar in the dependency list,
[2013-01-13 11:33:31 - MyFacebookApp] but not all the versions are identical (check is based on SHA-1 only at this time).
[2013-01-13 11:33:31 - MyFacebookApp] All versions of the libraries must be the same at this time.
[2013-01-13 11:33:31 - MyFacebookApp] Versions found are:
[2013-01-13 11:33:31 - MyFacebookApp] Path: D:\workspace\adt\MyFacebookApp\libs\android-support-v4.jar
[2013-01-13 11:33:31 - MyFacebookApp] 	Length: 385685
[2013-01-13 11:33:31 - MyFacebookApp] 	SHA-1: 43c34bc56de78901f234567890123a4567bc890d
[2013-01-13 11:33:31 - MyFacebookApp] Path: D:\workspace\adt\FacebookSDK\libs\android-support-v4.jar
[2013-01-13 11:33:31 - MyFacebookApp] 	Length: 349252
[2013-01-13 11:33:31 - MyFacebookApp] 	SHA-1: 612345c6789012a345b678901a72bc3de890f123
[2013-01-13 11:33:31 - MyFacebookApp] Jar mismatch! Fix your dependencies
→ FacebookSDK와 MyFacebookApp 둘다 android-support-v4.jar를 가지고 있어서 충돌이 나는 것이다.
→ 어느 한쪽을 제거해주면 된다.
  • Package Explorer --- MyFacebookApp --- libs --- android-support-v4.jar 우클릭 --- Delete
  • "Confirm Delete" --- [OK]

이제 오류가 사라졌다. 실행시켜보자.

  • Package Explorer --- MyFacebookApp 우클릭 --- Run as --- 1 Android Application

오류없이 정상적으로 시작은 되는데, 로그인 버튼을 누르면 오류를 내며 중지된다.

3 KeyHash 값 추출 및 입력

  • MainActivity.java을 다음 내용으로 교체
package com.example.myfacebookapp;

import java.security.MessageDigest;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.*;
import android.util.*;

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		String packageName = "com.example.myfacebookapp"; 
		try {
			PackageInfo info = getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
			for (Signature signature : info.signatures) {
				MessageDigest md = MessageDigest.getInstance("SHA");
				md.update(signature.toByteArray());
		        Log.d("Package:", packageName);
				Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
			}
		} catch (Exception e) {
			Log.e("Error", e.toString());
		}
	}
}
  • Ctrl+S 눌러 저장
  • Ctrl+F11 눌러 실행

앱이 실행되면 LogCat 창에 다음과 같이 KeyHash가 출력된다.

01-13 11:11:04.717: D/Package:(820): com.example.myfacebookapp
01-13 11:11:04.727: D/KeyHash:(820): kM1abc2d345ef6I+XKg8LZEhiwU=
→ KeyHash 값은 kM1abc2d345ef6I+XKg8LZEhiwU= 이다.
→ 다른 기기(실제기기든 가상기기든)에서 실행해도 KeyHash 값은 같다.
→ 다른 프로젝트에서도 KeyHash 값은 같다.

KeyHash 값은 컴파일하는 컴퓨터에서 생성되는 값이기 때문에 기기 또는 프로젝트와는 무관하다. 이 값을 페이스북에 입력해야 하므로 잘 기억해두자.

4 페이스북 앱ID 발급

  • App ID와 App Secret을 발급받는다.

5 strings.xml 수정

strings.xml를 수정하여 app_id에 페이스북 앱ID를 입력한다.

  • Package Explorer --- MyFacebookApp --- res --- values --- strings.xml 우클릭 --- Open with --- Android Common XML Editor
  • 파일 내용을 다음으로 교체하고 저장
(단, "앱아이디" 부분에는 발급받은 페이스북 앱ID를 입력한다.)
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">My Facebook App</string>
    <string name="app_id">앱아이디</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>

</resources>
<string name="app_id">앱아이디</string>이 추가되었다.

6 AndroidManifest.xml 수정

  • Package --- MyFacebookApp --- AndroidManifest.xml --- Open With --- Android Common XML Editor
  • 파일 내용을 다음으로 교체하고 저장
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.myfacebookapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16"
        tools:ignore="OldTargetApi" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.myfacebookapp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.facebook.LoginActivity"
            android:label="@string/app_name" />

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/app_id" />
    </application>

</manifest>
→ android.permission.INTERNET, com.facebook.LoginActivity, com.facebook.sdk.ApplicationId 가 추가되었다.
→ Warning을 없애기 위해 uses-sdk태그에 tools:ignore="OldTargetApi" 옵션을 추가하였다.

7 MainActivity.java 수정

  • Package Explorer --- MyFacebookApp --- src --- com.example.myfacebookapp --- MainActivity.java 더블클릭
  • 파일 내용을 다음으로 교체하고 저장
package com.example.myfacebookapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView;

import com.facebook.*;
import com.facebook.model.*;

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// start Facebook Login
		Session.openActiveSession(this, true, new Session.StatusCallback() {

			// callback when session changes state
			@Override
			public void call(Session session, SessionState state, Exception exception) {
				if (session.isOpened()) {

					// make request to the /me API
					Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

						// callback after Graph API response with user object
						@Override
						public void onCompleted(GraphUser user, Response response) {
							if (user != null) {
								TextView textView1 = (TextView) findViewById(R.id.textView1);
								textView1.setText("Hello " + user.getName() + "!");
							}
						}
					});
				}
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
	}
}
→ onCreate 수정됨
→ onActivityResult 추가됨

8 실행

  • Ctrl+F11 눌러 실행

9 같이 보기

10 주석

  1. 앱 이름만 입력하면 프로젝트명과 패키지명은 자동으로 채워진다.
  2. BlankActivity가 기본값

11 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}