소셜 로그인 3대장 중 하나인 Facebook 로그인을 구현해봅시다!
Facebook Developer
로고 디자인
개발자 계정
Facebook fo Developers 사이트에서 개발자 계정을 생성하고, 앱 등록을 먼저 해야 한다.
앱 등록 후, 아래 목록들이 필요하다.
•
App ID
•
App Secret
•
Client Token
•
User Token
App ID & App Secret
해당 앱의 대쉬보드에서 설정>기본 설정으로 이동하면 확인할 수 있다.
App Secret은 우측에 보기버튼을 누르면 확인할 수 있다.
Client Token & User Token
•
•
User Token
1.
권한을 부여해야합니다 를 선택
2.
상단의 도구>그래프 API 탐색기 메뉴를 선택
3.
앱을 선택
4.
Generate Access Token을 선택하면 생성
테스터 생성
위 홈페이지 내용대로
1.
대시 보드>역할>테스트 사용자 선택
2.
테스트 사용자 섹션으로 이동
3.
테스트 사용자 만들기 버튼 선택 계정 생성
4.
항목들을 모두 작성한 후, Create test users 버튼을 눌러 계정 생성
Unity
Facebook SDK for Unity
공식 홈페이지에서 다운로드한 파일의 압축을 해제하면 Unity Package파일이 들어있다.
실행시키면 Facebook SDK를 유니티 프로젝트에 Import 할 수 있다.
Facebook SDK를 Import 했다면 상단 메뉴에 Facebook 메뉴가 생성된다.
Facebook>Edit Settings를 선택하면 우측 inspector창에 Facebook 설정 목록이 뜬다.
App Name에 앱 이름을 적어주고
Facebook App Id에 Facebook Developer에서 확인한 App ID를 적어준다.
Android build Setting
Facebook 설정 목록 중 Android Build Facebook Settings에서 확인할 목록
•
Package Name: 앱 Bundle Id와 같은지 확인한다.
•
Class Name: Developer 페이지에서 사용되기 때문에 따로 저장
•
Key Hash: Regenerate Android Manifest 버튼을 눌러서 생성
◦
만약, 버튼을 눌러도 반응이 없다면 위에 오류 내용을 확인 필요
Android SDK
Android SDK를 설정하라는 오류
1.
Unity 상단 메뉴의 Edit>Preferences... 메뉴 선택
2.
External Tools메뉴에서 Android SDK Tool가 Unity 기본으로 설정되어있음을 확인
3.
Android SDK Tool의 체크박스를 해제
4.
Android Studio를 켜서 상단 메뉴 중 SDK Manager 메뉴를 선택
5.
Android SDK Location 칸에 적힌 경로를 확인
만약 설치된 SDK가 없다면 설치
6.
Unity External Tools에서 Android SDK Toold의 경로를 수정
7.
Facebook 설정 목록을 확인해서 오류가 사라졌는지 확인.
OpenSSL
OpenSSL을 찾을 수 없다는 오류.
1.
2.
압축 파일을 푼 다음 OpenSSL의 bin파일 경로를 확인
3.
시스템 환경변수 편집>환경변수 선택
4.
시스템 변수의 Path 에 경로를 추가
5.
컴퓨터 재부팅
6.
Facebook 설정 목록을 확인해서 오류가 사라졌는지 확인.
JDK
JDK를 찾을 수 없다는 오류.
1.
ORACLE에서 JDK를 다운받기
2.
OpenSSL과 동일하게 다운받은 JDK의 bin파일 경로 확인
3.
시스템 환경변수 Path 에 추가
4.
컴퓨터를 재부팅
테스트
Facebook SDK에서는 빌드하지 않고 테스트 할 수 있는 환경을 제공
Facebook SDK 패키지에서 Examples폴더에 들어있는 파일들이 필요.
MainMenu.unity 신을 열어서 Play 버튼을 누르면 메뉴들이 나타남
1.
FB.Init 버튼 선택
2.
비활성화 되어있던 버튼들이 활성화 됨
3.
Classic login 버튼 선택
4.
5.
Send Success 버튼 선택
6.
상단 Status에서 결과 확인
7.
Log 버튼을 선택하면 자세한 내용을 볼 수 있다.
코드
Initialized
using Facebook.Unity;
private void Awake()
{
if (!FB.IsInitialized)
{
FB.Init(InitCallback, OnHideUnity);
}
else
{
FB.ActivateApp();
}
}
private void InitCallback()
{
if (FB.IsInitialized)
{
FB.ActivateApp();
}
else
{
Debug.Log("Failed to Initialize the Facebook SDK");
}
}
private void OnHideUnity(bool isGameShown)
{
//facebook 로그인 과정에서 시간을 멈추는 역할
if (!isGameShown)
{
Time.timeScale = 0;
}
else
{
Time.timeScale = 1;
}
}
C#
복사
로그인
private void SignWithFacebook()
{
// 접근 권한을 얻을 항목들
var perms = new List<string>() { "public_profile", "email" };
FB.LogInWithReadPermissions(perms, AuthCallback);
}
private void AuthCallback(ILoginResult result)
{
if (FB.IsLoggedIn)
{
var token = Facebook.Unity.AccessToken.CurrentAccessToken;
Debug.Log("UID: " + token.UserId);
Debug.Log("Access Token: " + token.TokenString);
foreach (string perm in token.Permissions)
{
// 접근 권한이 있는 항목들
Debug.Log("perm: " + perm);
}
}
else
{
Debug.Log("User cancelled login");
}
}
C#
복사
빠른 로그인
private void ReSignwithFacebook()
{
FB.Mobile.RefreshCurrentAccessToken(RefreshCallback);
}
private void RefreshCallback(IAccessTokenRefreshResult result)
{
if (FB.IsLoggedIn)
{
var token = result.AccessToken;
Debug.Log("UID: " + token.UserId);
Debug.Log("Access Token: " + token.TokenString);
}
else
{
Debug.Log("Error: " + result.Error);
}
}
C#
복사
Android Build
Grandle build failed
stderr[
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':launcher:checkReleaseDuplicateClasses'.
> 1 exception was raised by workers:
java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.0.2)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.0.2)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.0.2)
Duplicate class android.support.v4.os.IResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.0.2)
Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.0.2)
...
Bash
복사
Android로 빌드 할 때, Console창에 위 내용이 찍히면서 실패하는 경우가 있다.
해결 방법
1.
Edit>Project Setting>Player>Publishing Setting>Build로 이동
2.
Custom Gradle Properties Template 체크
3.
아래 경로에 생성된 gradleTemplate.properties파일에서 제일 위에 다음 내용 추가
android.useAndroidX = true
android.enableJetifier = true
Bash
복사
4.
빌드 다시 시도
Xcode
Pod
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '12.0'
target 'UnityFramework' do
pod 'FBSDKCoreKit', '~> 11.0'
pod 'FBSDKCoreKit_Basics', '~> 11.0'
pod 'FBSDKGamingServicesKit', '~> 11.0'
pod 'FBSDKLoginKit', '~> 11.0'
pod 'FBSDKShareKit', '~> 11.0'
pod 'Firebase/Analytics', '8.3.0'
pod 'Firebase/Core', '8.3.0'
pod 'Firebase/Crashlytics', '8.3.0'
pod 'Google-Mobile-Ads-SDK'
end
target 'Unity-iPhone' do
end
use_frameworks!
Bash
복사
Podfile
Build Setting
pod update 했을 때, 위 사진처럼 경고 메세지가 뜨거나
Xcode에서 빌드를 눌렀을 때, 위 사진과 같은 오류가 발생한다면
1.
Xcode에서 Targets은 Unity-iPhone 선택
2.
BuildSetting메뉴 선택
3.
검색창에 LIBRARY_SEARCH_PATHS 검색
4.
작성되어있는 항목을 -버튼을 눌러 모두 삭제
5.
비어있는 상태인 LIBRARY_SEARCH_PATHS를 선택
6.
Backspace를 누르면 값이 자동으로 설정된다.
7.
OTHER_LDFLAGS도 동일하게 설정.
8.
다시 pod update
9.
초록색 글씨로 Pod installation complete! 문구가 나타난다면 설치 성공
Facebook Framework
General>Frameworks, Libraries, and Embedded Content
+버튼을 누르고 FBSDKCoreKit추가
실행
1.
Build후 게임 실행
2.
Facebook Login 버튼 선택
3.
아래 사진처럼 Facebook 로그인 창이 뜨고 아이디와 비밀번호를 입력해 로그인
해당 브라우저에서 이미 로그인 되어 있다면 이 과정은 생략됨.
4.
테스터에 등록되지 않은 계정이라면 위에 오류 메세지가 표시된다.
5.
테스트 계정으로 로그인 시, 정보 동의 페이지가 표시된다.
참고한 사이트