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 Party 配布パッケージ内にもある次のフレームワークにリンクする必要があります。
    • iOS: PlayFabParty
    • macOS: PlayFabPartyMac

注意

SSL ライブラリは Open SSL バージョン XXX からビルドされています。 OpenSSL のバージョン XXX 以上を使用する

ヘッダーが含む

Party ヘッダー

上記の LIB ファイルとヘッダー、PlayFab SDK 用の LIB とヘッダーに加えて、アプリが必要とするその他のプラットフォーム固有の依存関係が必要になります。 詳細については、iOS サンプルのプロジェクト ファイル組織をご覧ください。

iOS または macOS で PlayFab Party を動作させるための手順

コアとなる Party ライブラリは C++ で記述されているため、Objective-C++ コードから直接アクセスできます。 便宜上、Party LIB 機能にアクセスするためのシンプルな 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 Party を初期化するメソッドを公開しています。

// In SimpleClient.h
-(void) createNetwork:(NSString*) networkId;

SimpleClient の実装には、ネットワーク マネージャーを介して Party API を呼び出す C++ オブジェクトへの参照も含まれます。

// In SimpleClient.mm

@interface SimpleClient ()

@end

@implementation SimpleClient

SimpleClientImpl* m_impl;

SimpleClientImpl は C++ クラスで、以下のコード スニペットに示すように、Party ネットワークの作成に必要な作業を行うクラスです。

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 で公開されている生の Party 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 インターフェイスの各メソッドは、SimpleClientImplNetworkManager を介して Party API にマッピングされます。

解説

PlayFab Party が音声チャットに使用されることを意図している場合は、アプリケーションにマイク アクセスを許可する必要があります。 これを行うには、次のプロパティがアプリケーションの Info.plist ファイルに追加されていることを確認します。

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

次の手順

Party ライブラリを iOS または macOS アプリケーションに統合するためのプラットフォーム固有の手順を完了したら、PlayFab Party のクイック スタート に関するページをご覧いただき、PlayFab Party の開始手順を完了してください。