Aggiungere acquisti in-app a un gioco DirectX

Applies to Windows only

Puoi offrire prodotti e funzionalità che i giocatori possono decidere di acquistare durante l'uso del tuo gioco per Windows Store. In questo argomento mostreremo come abilitare tali offerte nel tuo gioco. Le informazioni illustrano in dettaglio un esempio per esaminare il codice necessario, l'esperienza prevista per il giocatore e la procedura per testare l'acquisto all'interno del gioco (con codice di prova).

Nota  Un cliente può effettuare un acquisto all'interno del gioco solo se ha acquistato una versione completa del tuo gioco.

Abilitazione degli acquisti all'interno dei giochi

Questo argomento mostra il codice che è possibile aggiungere all'esempio Marble Maze. Questo esempio è un gioco in cui il giocatore fa rotolare una biglia su un piano. All'avvio del gioco, la biglia è bianca. Questo codice consente al giocatore di acquistare una biglia di diverso colore durante il gioco.

Il modo in cui avviare il processo di acquisto all'interno del gioco dipende dalla progettazione del gioco. Questo esempio usa un pulsante della barra dell'app per avviare l'acquisto. Ecco il codice XAML per il pulsante della barra dell'app.



<Button Style="{StaticResource AppBarButtonStyle}" 
        AutomationProperties.Name="Change Marble" 
        Click="ChangeMarbleButton_Click">
    <Button.ContentTemplate>
        <DataTemplate>
            <Path   Stroke="{Binding Foreground, RelativeSource={RelativeSource Mode=TemplatedParent}}" 
                    Fill="White"
                    Width="20" Height="20" StrokeThickness="2" Stretch="Uniform">
                <Path.Data>
                    <EllipseGeometry Center="10,10" RadiusX="20" RadiusY="20" />
                </Path.Data>
            </Path>
        </DataTemplate>
    </Button.ContentTemplate>
</Button>

Ed ecco l'aspetto della barra dell'app e della biglia iniziale (gratuita) nell'esempio.

Biglia gratuita (predefinita) in Marble Maze

Il pulsante della barra dell'app attiva il gestore dell'evento ChangeMarbleButton_Click. Questo esempio mostra il gestore dell'evento.

Nota  Questo codice corrisponde a un effettivo acquisto all'interno del gioco. Mostreremo il codice per testare l'acquisto nella sezione Simulazione di un acquisto più avanti in questo argomento.


// Get the license info
// The next line is commented out for testing.
auto licenseInformation = CurrentApp.LicenseInformation;

// The next line is commented out for production/release.
// auto  licenseInformation = CurrentAppSimulator::LicenseInformation;

// Check to see if the player already owns the item.
if (!licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive)
{
    // The player does not own the item. Purchase the marble.
    concurrency::task<Platform::String^> purchaseOperation(CurrentApp::RequestProductPurchaseAsync("blueMarble", false));
    purchaseOperation.then([this](task<Platform::String^> previousTask)
    {
        try 
        { 
            // This line raises an exception if the purchase fails.
            previousTask.get(); 
            auto licenseInformation = CurrentApp::LicenseInformation; 
            if (licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive) 
            { 
                // Marble purchased.
                m_renderer.SwitchMarble();
            } 
            else 
            { 
                // Marble not purchased.
                // Notify the player.
            } 
        } 
        catch(Platform::Exception^ exception) 
        { 
            // Purchase failed.
            // Notify the player.
        } 
        });
}
else
{
    // The player does own the item.
    // Switch the marble color.
    m_renderer.SwitchMarble();
}

// Close the app bar.
bottomAppBar->IsOpen = false;


Il codice nell'esempio precedente controlla prima di tutto se il giocatore ha già il prodotto "blueMarble" tramite il metodo CurrentApp::LicenseInformation::ProductLicenses::IsActive. Se il giocatore non ce l'ha, il codice avvia un'attività RequestProductPurchaseAsync asincrona.

A questo punto, l'API Windows.ApplicationModel.Store presenta una serie di messaggi standard per guidare l'utente nell'acquisto del prodotto all'interno del gioco. La sezione Esperienza di acquisto all'interno del gioco in questo argomento dimostra l'esperienza di un giocatore che richiede una biglia di colore diverso.

Nota  L'esperienza di testing di un acquisto durante lo sviluppo è diversa. Esamineremo l'esperienza di testing in Simulazione di un acquisto più avanti in questo argomento.

L'attività restituisce il controllo in modo corretto, indipendentemente dal fatto che il giocatore confermi l'acquisto o meno. Quando l'attività restituisce il controllo, quindi, devi controllare se il prodotto è attivo chiamando di nuovo il metodo IsActive. Se si verifica un errore durante l'acquisto, tuttavia, la chiamata di previousTask.get() genera un'eccezione. Intercetta questa eccezione nel codice e gestiscila come acquisto non riuscito.

Ora che il giocatore ha acquistato la biglia di diverso colore, nel nostro esempio viene visualizzata la nuova biglia. Devi visualizzare subito il nuovo acquisto del giocatore.

Simulazione di un acquisto

Per testare la funzionalità di acquisto all'interno del gioco, devi simulare un acquisto. Per eseguire il testing, devi cambiare tutti i riferimenti di CurrentApp a CurrentAppSimulator nel codice. Questo esempio mostra il corpo del gestore eventi dalla sezione precedente con le modifiche necessarie per simulare un acquisto.

Nota  Puoi usare direttive del preprocessore e #ifdefs per modificare più facilmente la modalità di simulazione.


// Get the license info
// The next line is commented out for testing.
// auto licenseInformation = CurrentApp.LicenseInformation;

// The next line is commented out for production/release.       
auto  licenseInformation = CurrentAppSimulator::LicenseInformation;

// Check to see if the player already owns the item.
if (!licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive)
{
    // The player does not own the item. Purchase the marble.
    concurrency::task<Platform::String^> purchaseOperation(CurrentAppSimulator::RequestProductPurchaseAsync("blueMarble", false));
    purchaseOperation.then([this](task<Platform::String^> previousTask)
    {
        try 
        { 
            // This line raises an exception if the purchase fails.
            previousTask.get(); 
            auto licenseInformation = CurrentAppSimulator::LicenseInformation; 
            if (licenseInformation->ProductLicenses->Lookup("blueMarble")->IsActive) 
            { 
                // Marble purchased.
                m_renderer.SwitchMarble();
            } 
            else 
            { 
                // Marble not purchased.
            } 
        } 
        catch(Platform::Exception^ exception) 
        { 
            // Purchase failed.
        } 
        });
}
else
{
    // The player does own the item.
    // Switch the marble color.
    m_renderer.SwitchMarble();
}

// Close the app bar.
bottomAppBar->IsOpen = false;


Quando esegui questo codice, viene visualizzata la finestra di dialogo di prova seguente:

Finestra di dialogo di prova durante la simulazione dell'acquisto all'interno del gioco

Se selezioni Continue, l'acquisto simulato restituisce il controllo con esito positivo. Questo equivale al cliente che seleziona Buy e paga il prodotto.

Se selezioni Cancel, l'acquisto simulato restituisce il controllo con esito negativo. Ciò equivale al cliente che seleziona Cancel o non paga il prodotto.

Nota  In entrambi i casi devi restituire il codice di errore S_OK. L'API Windows.ApplicationModel.Store restituisce S_OK in entrambi i casi.

Esperienza di acquisto all'interno del gioco

Le API Windows.ApplicationModel.Store visualizzano un set standard di messaggi che confermano l'acquisto e il pagamento.

Quando il giocatore sceglie di acquistare un prodotto dal gioco, Windows.ApplicationModel.Store richiede info aggiornate a Windows Store, ad esempio il prezzo del prodotto:

Controllo del prezzo durante l'acquisto all'interno del gioco

Viene quindi visualizzato il messaggio di conferma:

Conferma dell'acquisto all'interno del gioco

La descrizione visualizzata dal messaggio di conferma è la descrizione immessa nella pagina Descriptionper l'offerta all'interno del gioco. Per info su questa descrizione, vedi Cosa includere nella descrizione dell'app.

Dopo aver fatto clic su Yes, il giocatore deve accedere all'account Microsoft per confermare la sua identità. Il giocatore deve eseguire questa operazione per ogni acquisto in-app per prevenire acquisti fraudolenti e non intenzionali.

Elaborazione del pagamento per l'acquisto all'interno del gioco

Dopo la conferma dell'acquisto e dell'identità del giocatore, viene elaborato il pagamento usando il metodo di pagamento predefinito del giocatore. Il giocatore configura il metodo di pagamento predefinito nelle impostazioni di Windows Store.

Al termine della transazione, viene visualizzato un messaggio di conferma finale e il cliente fa clic su Close per tornare al gioco.

Conferma dell'acquisto all'interno del gioco

A questo punto devi confermare che l'acquisto sia corretto e in caso affermativo, eseguire subito i passaggi necessari per implementarlo. Ad esempio, potresti dover aggiungere un nuovo prodotto all'inventario del giocatore o una nuova opzione di menu per abilitare un tema diverso. In questo esempio, visualizziamo la biglia in un nuovo colore:

Implementazione immediata dell'acquisto all'interno del gioco

Argomenti correlati

Abilitare gli acquisti in-app dalla tua app (Windows)

 

 

Mostra:
© 2014 Microsoft