다음을 통해 공유


iOS 및 macOS 시작

이 문서에서는 PlayFab Party를 iOS 또는 macOS 응용 프로그램에 통합하는 데 필요한 기본 필수 구성 요소 및 요구 사항을 나열합니다. 플랫폼별 단계를 완료한 후 PlayFab 파티의 빠른 시작을 참조하여 PlayFab 파티 시작을 완료하세요.

필수 구성 요소

이 자습서를 시작하기 전에 다음 필수 구성 요소가 충족되었는지 확인하세요.

  1. PlayFab 개발자 계정을 만들었습니다.
  2. PlayFab 타이틀을 만들었으며 타이틀이 PlayFab Party의 허용 목록에 포함되었습니다.
  3. Xcode 버전 10.2.1 이상이 설치되어 있습니다.
  4. PlayFab Party 플랫폼 리포지토리에 액세스할 수 있습니다.
  5. 배포를 위해 앱에 서명하는 데 사용할 수 있는 Apple 개발자 계정을 만들었습니다.

참고: 테스트에 XCode 시뮬레이터를 사용하려는 경우 응용 프로그램의 대상을 64비트($(ARCHS_STANDARD_64_BIT)) 아키텍처로 지정해야 합니다. 32비트 시뮬레이터는 현재 지원되지 않습니다.

필수 라이브러리 및 헤더 파일 포함

헤더

프레임워크

  • 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");

    PartyNetworkConfiguration cfg = {};

    // Setup the network to allow the maximum number of single-device players of any device type
    cfg.maxDeviceCount = c_maxNetworkConfigurationMaxDeviceCount;
    cfg.maxDevicesPerUserCount = 1;
    cfg.maxEndpointsPerDeviceCount = 1;
    cfg.maxUserCount = c_maxNetworkConfigurationMaxDeviceCount;
    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 인터페이스의 각 메서드는 SimpleClientImplNetworkManager을(를) 통해 파티 API에 매핑됩니다.

설명

PlayFab 파티가 음성 채팅에 사용되도록 의도된 경우 응용 프로그램에 마이크 액세스 권한을 부여해야 합니다. 이렇게 하려면 다음 속성이 애플리케이션의 Info.plist 파일에 추가되었는지 확인합니다.

<key>NSMicrophoneUsageDescription</key>
<string>The application requires access to the microphone for voice chat.</string>

다음 단계

플랫폼별 단계를 완료하여 파티 라이브러리를 iOS 또는 macOS 애플리케이션에 통합한 후 PlayFab 파티의 빠른 시작을 참조하여 PlayFab 파티 시작을 완료합니다.