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:
- Sie haben ein PlayFab-Entwicklerkonto erstellt.
- Sie haben einen PlayFab-Titel erstellt, und Ihr Titel wurde für die PlayFab-Party zugelassen.
- Sie haben Xcode Version 10.2.1 oder höher installiert.
- Sie haben Zugriff auf das PlayFab Party-Plattformrepository.
- 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
- Sie müssen die folgenden Headerdateien aus dem [PlayFab-Party-Verteilungsrepository] (https://github.com/PlayFab/PlayFabParty/releases) einschließen.
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
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 NetworkManager
der 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.