iOS 및 macOS 시작
이 문서에서는 PlayFab Party를 iOS 또는 macOS 응용 프로그램에 통합하는 데 필요한 기본 필수 구성 요소 및 요구 사항을 나열합니다. 플랫폼별 단계를 완료한 후 PlayFab 파티의 빠른 시작을 참조하여 PlayFab 파티 시작을 완료하세요.
필수 구성 요소
이 자습서를 시작하기 전에 다음 필수 구성 요소가 충족되었는지 확인하세요.
- PlayFab 개발자 계정을 만들었습니다.
- PlayFab 타이틀을 만들었으며 타이틀이 PlayFab Party의 허용 목록에 포함되었습니다.
- Xcode 버전 10.2.1 이상이 설치되어 있습니다.
- PlayFab Party 플랫폼 리포지토리에 액세스할 수 있습니다.
- 배포를 위해 앱에 서명하는 데 사용할 수 있는 Apple 개발자 계정을 만들었습니다.
참고: 테스트에 XCode 시뮬레이터를 사용하려는 경우 응용 프로그램의 대상을 64비트($(ARCHS_STANDARD_64_BIT)) 아키텍처로 지정해야 합니다. 32비트 시뮬레이터는 현재 지원되지 않습니다.
필수 라이브러리 및 헤더 파일 포함
헤더
- [PlayFab 파티 배포 리포지토리](https://github.com/PlayFab/PlayFabParty/releases)에서 다음 헤더 파일을 포함해야 합니다.
프레임워크
- PlayFab 파티 배포 패키지 내에서도 찾을 수 있는 다음 프레임워크에 애플리케이션을 연결해야 합니다.
- iOS: PlayFabParty
- macOS: PlayFabPartyMac
참고 항목
SSL 라이브러리는 Open SSL 버전 XXX에서 빌드됩니다. XXX 이상의 OpenSSL 버전 사용
헤더 포함
위의 lib 파일 및 헤더 외에도 PlayFab SDK 및 앱에 필요한 다른 플랫폼별 종속성에 대한 라이브러리 및 헤더도 필요합니다. 자세한 내용은 iOS 샘플에 대한 프로젝트 파일 조직을 살펴보세요.
iOS 또는 macOS에서 PlayFab 파티가 작동하도록 하는 단계
핵심 파티 라이브러리는 C++를 사용하여 작성되므로 Objective C++ 코드에서 직접 액세스할 수 있습니다. 편의를 위해 파티 라이브러리 기능에 액세스하는 간단한 Objective-C++ 래퍼 클래스를 만들었습니다. 상위 수준에서 네트워크를 만들고 네트워크에 연결하며 네트워크를 통해 메시지를 보내기 위해 Party API 메서드에 액세스할 수 있는 클래스가 필요합니다. SimpleClientClass는 iOS 데모 앱의 예로 표시됩니다.
//
// SimpleClient.h
// chatdemo_ios
#import <Foundation/Foundation.h>
#import "ChatEventHandler.h"
@interface SimpleClient : NSObject
@property (nonatomic) id<ChatEventHandler> chatEventHandler;
-(void) initialize;
-(void) setHandler:(id<ChatEventHandler>) messageHandler;
-(void) signInLocalUser;
-(void) createNetwork:(NSString*) networkId;
-(void) joinNetwork:(NSString*) networkId;
-(void) leaveNetwork;
-(void) sendTextAsVoice:(NSString*) text;
-(void) sendTextMessage:(NSString*) text;
-(void) setLanguageCode:(int) languageIndex;
-(NSArray *) getLanguageOptions;
-(int) getDefaultLanguageIndex;
-(NSString*) getSelectedUserName;
-(void) tick;
+(void) globalInitialize;
+(void) globalShutdown;
@end
위의 개체 브리지는 NetworkManager.cpp로 호출하는 순수 C++ 구현 파일에서 지원하며, 이 파일은 Party API를 호출합니다.
다음은 다양한 계층을 보여 주는 예제 조각입니다.
SimpleClient Objective-C 인터페이스는 PlayFab 파티를 초기화하는 메서드를 노출합니다.
// In SimpleClient.h
-(void) createNetwork:(NSString*) networkId;
SimpleClient 구현에는 네트워크 관리자를 통해 파티 API를 호출하는 C++ 개체에 대한 참조도 포함됩니다.
// In SimpleClient.mm
@interface SimpleClient ()
@end
@implementation SimpleClient
SimpleClientImpl* m_impl;
SimpleClientImpl은 아래 코드 조각과 같이 파티 네트워크를 만드는 작업을 많이 수행하는 C++ 클래스입니다.
void
SimpleClientImpl::CreateNetwork(
std::string &networkId
)
{
if (g_isRunning && g_initializeCompleted)
{
Managers::Get<NetworkManager>()->Initialize(c_pfTitleId);
m_messageHandler->OnStartLoading();
Managers::Get<NetworkManager>()->CreateAndConnectToNetwork(
networkId.c_str(),
[this, networkId](std::string message)
{
this->SendSysLogToUI("create network: %s", message.c_str());
Managers::Get<PlayFabManager>()->SetDescriptor(
networkId,
message,
[this, message](void)
{
m_messageHandler->OnEndLoading();
this->SendSysLogToUI("set network descriptor %s", "successed");
std::string l_message = message;
m_messageHandler->OnNetworkCreated(l_message);
});
},
[this](PartyError error)
{
m_messageHandler->OnEndLoading();
this->SendSysLogToUI("create network failed: %s", GetErrorMessage(error));
});
}
}
위의 코드 조각에서 SimpleClient는 NetworkManager::CreateAndConnectToNetwork()를 호출하여 Party.h에 노출된 원시 파티 API를 호출합니다
void
NetworkManager::CreateAndConnectToNetwork(
const char *networkId,
std::function<void(std::string)> callback,
std::function<void(PartyError)> errorCallback
)
{
DEBUGLOG("NetworkManager::CreateAndConnectToNetwork()\n");
// Set the maximum number of devices allowed in a network to 16 devices
constexpr uint8_t c_maxSampleNetworkDeviceCount = 16;
static_assert(c_maxSampleNetworkDeviceCount <= c_maxNetworkConfigurationMaxDeviceCount, "Must be less than or equal to c_maxNetworkConfigurationMaxDeviceCount.");
// Initialize network configuration for Party Network.
PartyNetworkConfiguration cfg = {};
cfg.maxDeviceCount = c_maxSampleNetworkDeviceCount;
cfg.maxDevicesPerUserCount = 1;
cfg.maxEndpointsPerDeviceCount = 1;
cfg.maxUserCount = c_maxSampleNetworkDeviceCount;
cfg.maxUsersPerDeviceCount = 1;
//Get the uid from the local chat control
PartyString uid = nullptr;
PartyError err = m_localUser->GetEntityId(&uid);
if (PARTY_FAILED(err))
{
DEBUGLOG("GetUserIdentifier failed: %s\n", GetErrorMessage(err));
errorCallback(err);
return;
}
// Setup the network invitation configuration to use the network id as an invitation id and allow anyone to join.
PartyInvitationConfiguration invitationConfiguration{
networkId, // invitation identifier
PartyInvitationRevocability::Anyone, // revokability
0, // authorized user count
nullptr // authorized user list
};
// Initialize an empty network descriptor to hold the result of the following call.
PartyNetworkDescriptor networkDescriptor = {};
// Create a new network descriptor
err = PartyManager::GetSingleton().CreateNewNetwork(
m_localUser, // Local User
&cfg, // Network Config
0, // Region List Count
nullptr, // Region List
&invitationConfiguration, // Invitation configuration
nullptr, // Async Identifier
&networkDescriptor, // OUT network descriptor
nullptr // applied initialinvitationidentifier.
);
if (PARTY_FAILED(err))
{
DEBUGLOG("CreateNewNetwork failed: %s\n", GetErrorMessage(err));
errorCallback(err);
return;
}
// Connect to the new network
if (InternalConnectToNetwork(networkDescriptor, networkId, errorCallback))
{
m_state = NetworkManagerState::WaitingForNetwork;
m_onnetworkcreated = callback;
m_onnetworkcreatederror = errorCallback;
m_onnetworkconnectedError = errorCallback;
}
}
비슷한 방식으로 SimpleClient Objective-C 인터페이스의 각 메서드는 SimpleClientImpl
및 NetworkManager
을(를) 통해 파티 API에 매핑됩니다.
설명
PlayFab 파티가 음성 채팅에 사용되도록 의도된 경우 응용 프로그램에 마이크 액세스 권한을 부여해야 합니다. 이렇게 하려면 다음 속성이 애플리케이션의 Info.plist 파일에 추가되었는지 확인합니다.
<key>NSMicrophoneUsageDescription</key>
<string>The application requires access to the microphone for voice chat.</string>
다음 단계
플랫폼별 단계를 완료하여 파티 라이브러리를 iOS 또는 macOS 애플리케이션에 통합한 후 PlayFab 파티의 빠른 시작을 참조하여 PlayFab 파티 시작을 완료합니다.