UE4, OnlineSubsystemFacebook(iOS) 사용하기.

HumanDevil 프로젝트는 Facebook 계정을 연동하여 플레이 할 수 있다.

Android 같은 경우에는 다운받은 FacebookSDK.jar을 추가하여 직접 사용하였지만,

iOS나 Window같은 경우에는 OnlineSubsystem으로 Facebook이 제공이 된다.

 

필요한 Module이름은 OnlineSubsystemFacebook이며 아래와 같이 Project.Build.cs에 추가하면 된다.

if ( Target.Platform == UnrealTargetPlatform.IOS )
{
PrivateDependencyModuleNames.Add("OnlineSubsystemFacebook");
}

 

그 다음 필요한 것은 Config/DefaultEngine.ini 파일을 수정하는 것이다.

OnlineSubsystemFacebook 코드 내부에는 아래와 같은 코드가 있으며,

GConfig->GetBool( 
TEXT("OnlineSubsystemFacebook"), 
TEXT("bEnabled"), 
bEnableFacebook, 
GEngineIni);

bEnableFacebook 값이 false이면, OnlineSubsystemFacebook이 생성되지 않는다.

Config/DefaultEngine.ini 파일에 아래의 코드를 넣어준다.

[OnlineSubsystemFacebook]
bEnabled=true

그 다음으로 해야할 것은 .plist 파일을 수정하는 것인데, 이것은 빌드시에 매번 자동으로 생성이 되는것 이다.
우리가 필요한 정보를 넣기 위해선 에디터에서 추가하거나 직접 Config 파일에 추가하는 것인데,
에디터에서는 IOS 설정에서 Extra Plist Data에 필요한 데이터들을 추가하면 된다.
필요한 데이터는 Facebook Developer 사이트를 참고하면 된다.

<key>FacebookAppID</key>	
<string>정보</string>	
<key>FacebookDisplayName</key>	
<string>정보</string>	
<key>CFBundleURLTypes</key>	
<array>
	<dict>		
	<key>CFBundleURLSchemes</key>	
		<array>	
			<string>정보</string>
		</array>
	</dict>	
</array>

이제 Facebook을 사용할곳에서 OnlineSubsystemFacebook.h를 포함한 후에 코드를 작성 하면된다.

간단히 Login 하는 방법을 나열하자면,
1. IOnlineSubsystem::Get(TEXT(“Facebook”)); 이와 같은 방법으로 OnlineSubsystem을 가져온다.
2. 가져온 시스템에서 GetIdentityInterface()를 이용하여 IdentityInterface를 얻어온 후, Login()를 호출하면 된다.
3. Login이 되던, 실패하던 어떠한 이벤트를 전달 받으려면 델리게이트를 추가해줘야 한다.

AddOnLoginCompleteDelegate_Handle(
0,
FOnLoginCompleteDelegate::CreateUObject(
this, 
&Class::Function));

이와 같이 추가한 후, 전달받은 정보를 통하여 로직을 구성하면 된다.

Advertisements

사용하지 않는 리소스들을 제외하여 쿠킹 했을 시, 리소스 동적 로드가 실패할 경우..

블루프린트와 코드를 폴리싱하는 중,
어느 순간 부터 모바일 배포 버전에서 아이템 아이콘들만 보이지 않는 문제가 발생 했다.

캡처
아주 가끔 몇몇 리소스들이 쿠킹되지 않는 경우가 있어서 대수롭지 않게 클린 빌드를 하였다.
하지만 그렇게 해결이 되었다면 이 글을 쓰지 않았다-_-..

결론을 말하자면, 빌드 과정에서 아이콘 리소스가 모조리 빠져서 패키징이 되어버렸기 때문이다.
리소스가 없으니.. 당연히 동적 로드는 실패하고, 아이콘은 보이지 않았던 것이다.

모바일 배포 버전을 만들때는 에디터에서 하지 않고, AutomationTool 을 이용하여 직접 빌드를 한다.
이유는 리소스의 압축과 사용되지 않는(레퍼런스 되지 않은) 리소스들을 제외하고 빌드를 하기 위해서다.
문제가 발생하기 이전에는 블루프린트에서 기존의 아이템 코드에 따라 특정 리소스를 일일이 다 셋팅을 해주었었다.
이 과정에서 리소스들은 레퍼런스가 되었고, 당연히 빌드에 포함이 되어 패키징이 되었다.

하지만 아이콘이 점점 많아 짐에 따라 유지보수가 어려워지므로, 리소스 경로를 이용하여 동적 로드를 하게 하였고 아이콘 텍스처들은 다른 블루 프린트 내에서 직접 쓰이지 않는 이상 레퍼런스 되지가 않는다. 이 상태에서 빌드를 진행하면, 레퍼런스되어 있지 않기 때문에.. 당연히 제외 되었다. 생각한 해결 방법은..

  1. 빌드를 할 떄 무조건 포함하여야할 리소스들을 알려주는 것이다.
  2. 어디서든 해당 리소스들을 레퍼런스 시키는 것

=== 150606 추가.

첫번째 방법을 찾았다.

-CookDir=”dir1″ + “dir2” 를 추가하여 빌드를 하면 된다.

추가 끝===

하지만 첫번째 방법은 쉽게 방법을 찾지 못했고, 임시로 두번째 방법을 사용하였다.
블루프린트 내에서 각각 리소스를 레퍼런스하는 노드를 만드는것 ㅠㅠ.
직접 실행이 되지 않는 노드들이고.. 오로지 리소스를 레퍼런스하여 빌드에 포함되게 하려는 용도 이다.
캡처 캡처
빌드를 하니 잘 보인다..
주말에 시간이 남으면 첫번째 방법이나 더 좋은 방법을 찾아봐야겠다.