Freigeben über


Erste Schritte mit iOS und macOS

In diesem Dokument werden die grundlegenden Voraussetzungen und Anforderungen aufgeführt, die für die Integration von PlayFab Party in Ihre iOS- oder macOS-Anwendungen erforderlich sind. Nachdem Sie die plattformspezifischen Schritte abgeschlossen haben, lesen Sie den Schnellstart für die PlayFab-Party , um die ersten Schritte mit der PlayFab-Party abzuschließen.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:

  1. Sie haben ein PlayFab-Entwicklerkonto erstellt.
  2. Sie haben einen PlayFab-Titel erstellt, und Ihr Titel wurde für die PlayFab-Party zugelassen.
  3. Sie haben Xcode Version 10.2.1 oder höher installiert.
  4. Sie haben Zugriff auf das PlayFab Party-Plattformrepository.
  5. Sie haben ein Apple-Entwicklerkonto erstellt, mit dem Sie Ihre App für die Bereitstellung signieren können.

HINWEIS: Wenn Sie den XCode-Simulator zu Testzwecken verwenden möchten, müssen Sie Ihre Anwendung auf die 64-Bit-Architektur ($(ARCHS_STANDARD_64_BIT)) ausrichten. 32-Bit-Simulatoren werden derzeit nicht unterstützt.

Einschließen der erforderlichen Bibliotheken und Headerdateien

Header

Frameworks

  • Sie müssen Ihre Anwendung mit den folgenden Frameworks verknüpfen, die sich auch in den PlayFab-Party-Verteilungspaketen befinden.
    • iOS: PlayFabParty
    • macOS: PlayFabPartyMac

Notiz

Die SSL-Libs werden aus open SSL Version XXX erstellt. Verwenden einer OpenSSL-Version, die XXX oder höher ist

Header enthält

Partyheader

Zusätzlich zu den oben genannten Lib-Dateien und Headern benötigen Sie auch die Libs und Header für das PlayFab SDK und alle anderen plattformspezifischen Abhängigkeiten, die Ihre App benötigt. Sehen Sie sich die Projektdatei organization für das iOS-Beispiel an, um weitere Informationen zu erhalten.

Schritte zum Ausführen der PlayFab-Party unter iOS oder macOS

Da die Kern-Parteibibliothek mit C++ geschrieben wird, ist sie direkt über C++-Zielcode zugänglich. Der Einfachheit halber haben wir eine einfache Objective-C++-Wrapperklasse für den Zugriff auf die Party lib-Funktionalität erstellt. Im Allgemeinen benötigen Sie eine Klasse, die Zugriff auf Party-API-Methoden hat, um ein Netzwerk zu erstellen, eine Verbindung mit einem Netzwerk herzustellen und Nachrichten über ein Netzwerk zu senden. Die SimpleClientClass wird als Beispiel in unserer iOS-Demo-App gezeigt.

//
//  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

Die obige Objektbrücke wird von einer reinen C++-Implementierungsdatei unterstützt, die die NetworkManager.cpp aufruft, die wiederum die Party-APIs aufruft.

Hier ist ein Beispielausschnitt, der die verschiedenen Ebenen zeigt:

Die SimpleClient Objective-C-Schnittstelle macht eine Methode zum Initialisieren von PlayFab Party verfügbar.

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

Die Implementierung des SimpleClient enthält auch einen Verweis auf das C++-Objekt, das über den Netzwerk-Manager Partei-APIs aufruft.

// In SimpleClient.mm

@interface SimpleClient ()

@end

@implementation SimpleClient

SimpleClientImpl* m_impl;

SimpleClientImpl ist eine C++-Klasse, die das Erstellen des Party-Netzwerks wie im folgenden Codeausschnitt gezeigt stark vereinfacht:

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));
            });
    }
}

Im obigen Codeausschnitt ruft der SimpleClient NetworkManager::CreateAndConnectToNetwork() auf, wodurch wiederum die unformatierte Party-API aufgerufen wird, die in Party.h verfügbar gemacht wird.

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;
    }
}

Auf ähnliche Weise wird jede Methode in der SimpleClient Objective-C-Schnittstelle über SimpleClientImpl und NetworkManagerder Party-API zugeordnet.

Hinweise

Wenn PlayFab Party für den Sprachchat verwendet werden soll, muss der Anwendung Mikrofonzugriff gewährt werden. Stellen Sie hierzu sicher, dass der Datei Info.plist der Anwendung die folgende Eigenschaft hinzugefügt wird.

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

Nächste Schritte

Nachdem Sie die plattformspezifischen Schritte zum Integrieren der Party-Bibliothek in Ihre iOS- oder macOS-Anwendung abgeschlossen haben, finden Sie unter Schnellstart für playFab Party informationen zu den ersten Schritten mit playFab Party.