Zum Inhalt springen

iOS-Abrechnungspläne mit monatlicher Bindung

GitHub

Apple unterstützt Abonnements, die monatlich abgerechnet werden, den Kunden aber an eine längere 12-Monats-Laufzeit binden. Wenn StoreKit und das laufende Betriebssystem diesen Abrechnungsplan unterstützen, @capgo/native-purchases stellt die Preisbedingungen bereit, lässt Sie beim Kauf den monatlichen Abrechnungsplan auswählen und liefert Commitment-Metadaten zu Transaktionen und Erneuerungsinfos.

Verwenden Sie dies für jährliche Abo-Angebote, bei denen Nutzer monatliche Zahlungen bevorzugen, Sie aber die Kundenbindung und Planbarkeit einer festen Jahreslaufzeit wollen.

  • Konfigurieren Sie den monatlichen Abrechnungsplan mit 12-Monats-Commitment in App Store Connect oder in StoreKit Testing in Xcode.
  • Erstellen Sie die iOS-App mit einem Xcode SDK, das StoreKit enthält pricingTerms und billingPlanType.
  • Führen Sie sie auf einer iOS-Version aus, die StoreKit-Commitment-Abrechnungspläne unterstützt.
  • Stellen Sie sicher, dass eine Standard-Abrechnungsoption für Geräte oder Stores verfügbar ist, die keine Commitment-Preise zurückgeben.

Rufe getProducts() wie üblich. Für unterstützte iOS-Abonnementprodukte kann jedes Produkt enthalten pricingTerms.

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['com.example.app.premium.yearly'],
productType: PURCHASE_TYPE.SUBS,
});
const premiumYearly = products.find(
(product) => product.identifier === 'com.example.app.premium.yearly',
);
const monthlyCommitment = premiumYearly?.pricingTerms?.find(
(term) => term.billingPlanType === 'monthly',
);

Rendern Sie die vom Store bereitgestellten Werte anstelle von hartkodierten Preisen:

FeldVerwendungszweck
billingDisplayPriceden wiederkehrenden Rechnungsbetrag, der dem Benutzer angezeigt wird, z. B. die monatliche Gebühr.
billingPerioddas Abrechnungsintervall für den angezeigten Abrechnungspreis.
commitmentInfo.priceStringDer Gesamtpreis des Commitments, formatiert für den Storefront des Nutzers.
commitmentInfo.periodDie vollständige Commitment-Dauer.
subscriptionOffersEingeführte oder Werbeangebote, die an den Preisterm gebunden sind.

Beispiel für Paywall-Text:

function commitmentLabel(term: NonNullable<typeof monthlyCommitment>) {
const total = term.commitmentInfo?.priceString;
return total
? `${term.billingDisplayPrice} billed monthly, ${total} total commitment`
: term.billingDisplayPrice;
}

Wenn der Nutzer den monatlichen Commitment-Plan auswählt, übergeben Sie billingPlanType: 'monthly'.

const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'com.example.app.premium.yearly',
productType: PURCHASE_TYPE.SUBS,
billingPlanType: 'monthly',
appAccountToken: userStoreUuid,
});

Nutzt billingPlanType: 'upFront' nur, wenn du den Standard-Vorab-Tarif explizit auswählen musst. Wenn du billingPlanTypeauslassen, verwendet StoreKit das Standard-Kaufverhalten für das Produkt.

Transaktionen enthalten den Abrechnungsplan und den Commitment-Fortschritt, sofern StoreKit diese bereitstellt:

if (transaction.billingPlanType === 'monthly') {
console.log('Current billing period:', transaction.commitmentInfo?.billingPeriodNumber);
console.log('Total billing periods:', transaction.commitmentInfo?.totalBillingPeriods);
console.log('Commitment ends:', transaction.commitmentInfo?.expirationDate);
console.log('Commitment total:', transaction.commitmentInfo?.price);
}

Die Renewal-Infos können den nächsten Commitment-Zustand enthalten:

const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
onlyCurrentEntitlements: true,
});
for (const purchase of purchases) {
const commitment = purchase.renewalInfo?.commitmentInfo;
if (!commitment) continue;
console.log('Renews into another commitment:', commitment.willAutoRenew);
console.log('Next billing plan:', commitment.renewalBillingPlanType);
console.log('Next renewal date:', commitment.renewalDate);
}

Nutze das Top-Level- expirationDate und isActive Felder für Berechtigungsentscheidungen. Verwenden Sie commitmentInfo.expirationDate um dem Kunden den vollständigen Commitment-Zeitraum zu erklären.

  • Zeige vor dem Kauf sowohl den wiederkehrenden Preis als auch den Gesamtpreis der Laufzeit an.
  • Gib die Laufzeit direkt beim Kauf-Button klar an.
  • Nutzt product.title, product.priceString, pricingTerms[].billingDisplayPrice, und pricingTerms[].commitmentInfo.priceString aus StoreKit statt hartcodierter Preise.
  • Ermögliche das Wiederherstellen von Käufen sowie die Verwaltung von Abonnements direkt auf dem Paywall- oder Account-Screen.

Wenn du es nutzt iOS-Abrechnungspläne mit monatlicher Bindung um Zahlungen und Käufe zu planen, verbinde es mit @capgo/native-purchases verwenden für die native Funktionalität bei der Nutzung von @capgo/native-purchases, Capgo Preise für den Produkt-Workflow auf der Preisseite von Capgo, Zahlungssystem für die Implementierungsdetails im Zahlungssystem, @capgo/native-purchases für die Implementierungsdetails in @capgo/native-purchases und Erste Schritte für die Implementierungsdetails in Getting Started.