Skip to content

Système d'Objets et Boutique Payante de la Plateforme

Ce système fournit une solution unifiée de gestion d'objets payants pour la plateforme de jeu, prenant en charge des fonctionnalités telles que l'achat, la distribution et les statistiques d'objets pour les jeux autonomes, implémentant les fonctions d'achat, de consultation, d'ajout/réduction d'objets et de distribution déclenchée par le processus de jeu.

  • Fonctionnalités principales : Achat d'objets, Consultation de la possession, Opérations d'ajout/réduction, Surveillance des changements, Distribution déclenchée par le processus de jeu

1. Fonctionnalités de Gestion Backend pour les Développeurs

  • Les développeurs peuvent créer manuellement des données d'objets via le backend, prenant en charge le téléchargement de tableaux (tableau d'unités d'objets) et d'icônes d'objets.
  • Les objets payants de la boutique ne prennent actuellement en charge que la création manuelle.
  • Prend en charge la création de jusqu'à 5000 entrées de données d'objets.
  • Ne prend actuellement en charge que les jeux de type achat unique et achats intégrés.
  • Les objets doivent être approuvés après leur création ; une fois approuvés, ils passent par défaut à l'état activé.

Fonctionnalités de Gestion des Objets :

‌ID de l'objet‌ : Identifiant unique, ne peut pas être modifié après la création
‌Nom et icône de l'objet‌ : Utilisés pour l'affichage frontend
‌Icône de l'objet‌ : Prend en charge le remplacement manuel de l'image de l'icône
‌Règles de création d'objets : Prend en charge la sélection entre Objet de jeu et Objet payant de la boutique
Limites de l'objet : Prend en charge la définition de limites pour la distribution aux joueurs via la plateforme, telles que la limite de quantité de distribution quotidienne, la limite de quantité totale ou aucune limite
‌Stock d'objets‌ : Peut choisir de saisir une quantité ou de ne définir aucune limite
Paramètres de valeur de l'objet :
Objet gratuit (Platform activities) : Prend en charge la distribution via les activités de la plateforme.
Achat payant (Paid purchase) : Prend en charge l'achat payant dans la boutique d'objets.
Tarification par défaut en dollars américains
Le prix unitaire de l'objet prend en charge une précision allant jusqu'à 0,0001 USD
La valeur minimale de saisie pour les objets payants de la boutique est de 1 USD
Suggestion
  • Enregistrez d'abord les unités d'objets, puis saisissez manuellement les objets pour achat payant dans la boutique ; prend en charge la sélection d'un ou plusieurs objets pour former un produit groupé à vendre.
  • Lorsqu'un objet est défini comme objet gratuit, la plateforme peut choisir de le distribuer aux joueurs selon les plans opérationnels ; il sera livré au personnage de jeu du joueur lorsqu'il entrera dans le jeu.

alt textalt text

2. Intégration du SDK d'Objets

Description des Interfaces Principales

Nom de l'InterfaceSignature de MéthodeDescription de la Fonctionnalité
Ouvrir la fenêtre d'achatopenBuyGameItemsDialog(level: number)Ouvre la boîte de dialogue d'achat d'objets de la boutique via l'interface fonctionnelle dans le jeu.
Obtenir les objets possédésgetUserGameItems(): GameItem[]Consulte la liste actuelle d'objets du joueur lors de l'entrée dans le jeu (inclut l'ID et la quantité).
Ajouter un objetaddGameItem(itemId: string, amount: number)Distribue des objets pendant la progression du jeu (prend en charge des scénarios tels que les achats, les récompenses de niveau, l'achèvement de mission, etc.).
Réduire un objetsubtractGameItem(itemId: string, amount: number)Consomme des objets (scénarios d'utilisation ou de consommation pendant la progression du jeu, la quantité après déduction est non négative).
S'abonner aux notifications de changementsubscribeGameItemChange(callback: (res: GameItemChange) => void)Méthode de rappel exécutée lorsque le paiement d'un objet payant de la boutique est terminé.

Formats de Données Clés

  • ​**GameItem (Information sur l'objet)**​ : { itemId: string, amount: number }
  • ​**GameItemChange (Information sur le changement)**​ : { itemId: string, amount: number, changeType: 'add'|'subtract', total: number }

2.1 Obtenir la liste des objets possédés

javascript
// Obtenir la liste des objets possédés par le joueur (appelé pendant l'initialisation du jeu)
const items = window.JOGOS_SDK.gameItem.getUserGameItems();
console.log('Objets possédés :', items);

2.2 Ouvrir la fenêtre d'achat d'objets

javascript
// Ouvrir la fenêtre d'achat d'objets
window.JOGOS_SDK.gameItem.openBuyGameItemsDialog(10);

2.3 Ajouter un objet

javascript
// Ajouter un objet (ID : 3232addasdda3aa2, quantité : 10)
window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 10);

2.4 Réduire un objet

javascript
// Réduire un objet (ID : 3232addasdda3aa2, quantité : 5)
window.JOGOS_SDK.gameItem.subtractGameItem('3232addasdda3aa2', 5);

2.5 S'abonner aux notifications de changement d'objet

javascript
// S'abonner aux notifications de changement d'objet
window.JOGOS_SDK.gameItem.subscribeGameItemChange((res) => {
 console.log('Changement d'objet :', res);
});

2.6 Flux complet d'achat d'objet payant

javascript
// 1. Lancer l'achat d'objet payant (ID du produit : item_gold_100, correspond à l'objet de 100 pièces d'or)
async function buyGoldItem() {
  try {
    const orderNo = await window.JOGOS_SDK.payment.buyGoods('item_gold_100');
    console.log('Commande créée avec succès, numéro de commande :', orderNo);
  } catch (err) {
    console.error('Échec de la création de commande :', err);
    alert('Échec du lancement de l'achat, veuillez réessayer plus tard');
  }
}

// 2. S'abonner aux notifications de paiement réussi (appelé pendant l'initialisation du jeu)
window.JOGOS_SDK.payment.subscribeOrderPaid(async (order) => {
  console.log('Paiement réussi, détails de la commande :', order);
  if (order.status === 'success') {
    // 3. Distribuer l'objet correspondant (ID du produit : item_gold_100 correspond à l'ID d'objet : 3232addasdda3aa2)
    window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 100);
    // 4. Notifier la plateforme de la livraison (doit être appelé, sinon le statut de la commande sera anormal)
    await window.JOGOS_SDK.payment.deliverGoods(order.orderNo);
    alert('100 pièces d'or achetées avec succès, ont été livrées dans le sac à dos !');
  }
});

// 3. Scénario d'exception : Consulter les détails de la commande (par exemple, si l'objet n'est pas reçu après paiement)
async function checkOrder(orderNo) {
  try {
    const order = await window.JOGOS_SDK.payment.getOrderDetail(orderNo);
    console.log('Requête de détails de commande :', order);
    if (order.status === 'success') {
      // Redistribuer l'objet
      window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 100);
      await window.JOGOS_SDK.payment.deliverGoods(orderNo);
    }
  } catch (err) {
    console.error('Échec de la requête de commande :', err);
  }
}

2.7 Distribution d'objets déclenchée par le processus de jeu (Exemple : Récompense de fin de niveau)

javascript
// La fin du niveau 10 déclenche la distribution d'objets (inclut une logique de déduplication pour éviter les réclamations en double)
function onLevel10Clear() {
  // Jeu autonome : utiliser le stockage local pour enregistrer le statut de distribution
  const hasIssued = localStorage.getItem('level10_award_issued');
  if (hasIssued) {
    alert('Cette récompense de niveau a déjà été réclamée, ne peut pas être réclamée à nouveau');
    return;
  }

  // Distribuer l'objet (ID : 3232addasdda3aa2, quantité : 10)
  window.JOGOS_SDK.gameItem.addGameItem('3232addasdda3aa2', 10);
  // Enregistrer le statut de distribution
  localStorage.setItem('level10_award_issued', 'true');
  alert('Niveau 10 terminé avec succès ! 10 récompenses d'objet obtenues');
}