メインコンテンツにスキップ
チュートリアル

CloudflareのCapacitorにおけるStripe Payments: 新しいAppleガイドライン

CapacitorアプリにStripe Payment Linksを実装して、デジタル商品の支払いをAppleの新しいガイドラインに準拠して処理する方法を学びましょう。新しいAppleガイドラインは2025年5月1日から有効になります。

マーティン・ドナディュー

マーティン・ドナディュー

コンテンツマーケター

CloudflareのCapacitorにおけるStripe Payments: 新しいAppleガイドライン

Capacitorアプリに基づく新しいAppleガイドラインに従ってStripe Payment Linksを実装する

2025年5月1日から、AppleはEpic v. Apple裁判の判決に基づいてApp Store Reviewガイドラインを大幅に変更しました。これにより、アメリカのアプリ開発者はデジタル商品やサービスに対する外部の支払い方法へのリンクを許可され、Appleのインアプリ購入システムの代替を提供するようになりました。 Epic v. Apple裁判. These changes specifically allow app developers in the United States to link out to external payment methods for digital goods and services, opening up alternatives to Apple’s in-app purchase system.

The Epic Battle That Changed Mobile Payments Forever

この歴史的勝利の道筋は、長く紛争の多いものだった。2020年8月、人気のゲーム『フォートナイト』の開発元であるEpic Gamesは、AppleのApp Storeのガイドラインを無視して、直接の決済オプションを実装した。これにより、Appleは『フォートナイト』をApp Storeから削除し、EpicはAppleのiOSアプリの配布とインアプリ決済の制御に対する訴訟を起こした。

長年の裁判、上告、反上告の後、裁判所はようやくAppleにアプリ内でユーザーに代替決済方法へのアクセスを許可することを決定した。この決定は、2008年に設立されて以来、App Storeのエコシステムの基本的な財政モデルを根本的に変えるものである。

最終判決 - 上告なし

この判決が特に重要なのは、最終的であり、上告できないことである。Appleの上告は、2025年初頭に最高裁が却下し、下級裁判所の判決は法律の基盤となった。このため、開発者は、Appleがこの決定を上告によって覆すことはないことを信頼して、外部の決済方法を実装できる。

法律によって公平な扱いが保証される

最も重要なのは、判決がAppleが外部の決済方法を使用するアプリに差別することを明確に禁止していることである。裁判所は、Appleが次のことを禁止するように命じた:

  1. __CAPGO_KEEP_0__
  2. __CAPGO_KEEP_0__
  3. __CAPGO_KEEP_0__
  4. __CAPGO_KEEP_0__

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__

__CAPGO_KEEP_0__

  • __CAPGO_KEEP_0____CAPGO_KEEP_0__

  • __CAPGO_KEEP_0__: Appleでは、受け取るまでに45-90日待たされることが多いですが、Stripeでは、2-3営業日以内に銀行口座に決済金額を振り込むことができます。

  • Simplified Refund Process: Appleの複雑な返金システムを回避して、直接Stripeのダッシュボードから返金を取り扱うことができます。

小規模の開発者やビジネスにとって、これらのコスト削減とキャッシュフロー改善はゲームチェンジャーとなるでしょう。

この記事では、CapacitorアプリでStripe Payment Linksを実装する方法について説明します。これにより、Appleの新しいガイドラインに準拠しながら、こうした新しい規則を利用できます。 この実装は、Stripeの公式ドキュメントに基づいています。ただし、__CAPGO_KEEP_0__アプリ向けに特に適応されています。.

AppleのApp Store Reviewガイドラインの更新 App Storeの更新されたガイドラインでは、開発者は、特にデジタル商品やサブスクリプションの場合、ユーザーを外部サイトに導くことが許可されました。この変更は、現在、アメリカのApp Storeでのみ適用されます。, adapted specifically for Capacitor apps.

]}

key points to understand:

key points to understand:

  1. 現在、外部の決済オプションをアプリ内でリンクできます。
  2. この機能は、アメリカのApp Storeに配布されているアプリにのみ適用されます。
  3. Appleの開示要件に従う必要があります。
  4. 顧客サポートと返金処理の責任はあなたに残ります。

技術的な実装について詳しく見ていきましょう。

まず、Stripe ダッシュボードで支払いリンクを作成してください。

  1. Stripe ダッシュボードの「支払いリンク」セクションに移動してください。
  2. 「+ New」ボタンをクリックして、新しい支払いリンクを作成してください。
  3. 製品またはサブスクリプションの詳細を定義してください。
  4. 「支払い後」設定の「確認ページを表示しない」にチェックを入れてください。
  5. 成功URLとしてuniversal linkを設定してください (後で設定します)
  6. 「Create Link」をクリックして支払いリンクを生成してください

支払い完了後にユーザーをアプリに戻すには、universal linkを設定してください

  1. ドメインに「ファイル」を作成してください apple-app-site-association このファイルを「」にホストしてください
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appIDs": ["YOURTEAMID.com.yourdomain.yourapp"],
        "components": [
          {
            "/": "/checkout_redirect*",
            "comment": "Matches any URL whose path starts with /checkout_redirect"
          }
        ]
      }
    ]
  }
}
  1. 正しいMIMEタイプでサーバーから提供されていることを確認してください https://yourdomain.com/.well-known/apple-app-site-association

  2. __CAPGO_KEEP_0__ アプリをuniversal linkを処理できるように設定するには、適切なエンタイトルメントを追加してください。まず、 application/json

  3. Configure your Capacitor app to handle universal links by adding the proper entitlement. First, in your capacitor.config.ts:

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  // Your existing app configuration (appId, appName, etc.)
  plugins: {
    Geolocation: {
      // Request precise location access on iOS
      iosLocationAccuracy: 'reduced'
    }
  }
};

export default config;
  1. Xcodeプロジェクトを開いてください
    • アプリのターゲットを選択してください
    • targetLanguage
    • 「署名 & 機能」に移動
    • 「+ 機能」ボタンをクリックし、「関連するドメイン」を選択
    • 追加 applinks:yourdomain.com

ステップ 3: フェールバック ページの作成

アプリがインストールされていない場合のケースを処理するために、リダイレクト URL でフェールバック ページを作成してください。

<!DOCTYPE html>
<html>
<head>
  <title>Redirecting...</title>
  <meta http-equiv="refresh" content="0;url=https://yourdomain.com/app-download">
</head>
<body>
  <p>Redirecting to download page...</p>
</body>
</html>

ステップ 4: アプリに Capacitor を実装する

アプリに支払いボタンを追加してください。

import { Capacitor } from '@capacitor/core';

export async function openPaymentLink(userEmail, userId) {
  // Use your actual Stripe payment link
  const baseUrl = 'https://buy.stripe.com/your_payment_link';
  
  // Add URL parameters to customize the experience
  const params = new URLSearchParams({
    prefilled_email: encodeURIComponent(userEmail),
    client_reference_id: userId
  });

  const fullUrl = `${baseUrl}?${params.toString()}`;
  
  // Simple window.open works in both web and Capacitor
  // Using _blank opens in Safari on iOS which is important for users with saved Stripe Link credentials
  window.open(fullUrl, '_blank');
}

Safari の重要性Safari (via window.open) で支払いリンクを開くのではなく、インストール済みのアプリ内ブラウザで開くことは、ユーザーが以前ストリーピー リンクで支払い情報を保存していた場合、自動的にクレジットカード情報が利用可能になります。これにより、ユーザーが再度クレジットカード情報を入力する必要がなくなるため、チェックアウトのフリクションと放棄率が大幅に減ります。

ステップ 6: Universal Links を処理するアプリの設定

  1. First, App プラグインをインストールしてください:
npm install @capacitor/app
  1. App プラグインをアプリに登録してください:
import { App } from '@capacitor/app';

// In your initialization code
App.addListener('appUrlOpen', (event) => {
  // Example URL: https://yourdomain.com/checkout_redirect?session_id=cs_test_...
  const url = new URL(event.url);
  
  if (url.pathname.startsWith('/checkout_redirect')) {
    // Extract any parameters you need
    const params = new URLSearchParams(url.search);
    const sessionId = params.get('session_id');
    
    // Handle successful payment
    if (sessionId) {
      // Verify the payment on your server if needed
      verifyPayment(sessionId);
      
      // Update UI to reflect successful purchase
      updatePurchaseStatus(true);
    }
  }
});

async function verifyPayment(sessionId) {
  // Call your backend to verify the payment
  // This is optional if you're relying on webhooks
}

function updatePurchaseStatus(success) {
  // Update your app UI to reflect purchase status
}

ステップ 6: 注文処理のための Webhook を設定する

最後に、成功した支払いを処理するためにサーバー上で Webhook を構成してください:

// Using Express.js as an example
const express = require('express');
const stripe = require('stripe')('sk_test_your_stripe_secret_key');
const app = express();

// Use raw body parser for webhook signature verification
app.post('/webhook', express.raw({type: 'application/json'}), async (req, res) => {
  const sig = req.headers['stripe-signature'];
  const webhookSecret = 'whsec_your_webhook_secret';
  
  let event;
  
  try {
    event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
  } catch (err) {
    console.log(`Webhook Error: ${err.message}`);
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }
  
  // Handle the checkout.session.completed event
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;
    
    // Retrieve client_reference_id (your user ID)
    const userId = session.client_reference_id;
    
    // Grant access to the purchased content
    await grantAccess(userId, session.id);
  }
  
  res.status(200).send();
});

async function grantAccess(userId, sessionId) {
  // Your logic to grant access to the purchased content
  // This could be updating a database, sending a notification, etc.
}

app.listen(3000, () => console.log('Webhook server running on port 3000'));

Android の互換性

Epic v. Apple 判決は、モバイル ペイメント ランドスケープを根本的に変えました。 iOS アプリに直接影響するだけでなく、Android 開発者にとっては、外部の支払い方法を使用する立場を強化しました。

Android 開発者は、完全な自信を持って外部の支払いソリューションを実装できます。 Apple 判決によって設定された先例は、開発者がさまざまなプラットフォームで外部の支払い方法を使用するリスクを完全に排除しました。この裁判所の決定は、多くの Android 開発者が何年も前から行ってきたことの正当性を証明しました - 低い手数料で提供する代替支払いオプション。

Google Play Store は、Apple よりも外部の支払い方法については常に制限が少なかったのですが、法律上の先例が確立された今、Stripe または他の外部の支払いプロバイダーを Android アプリに実装するリスクはほとんどありません。Stripe Payment Links のアプローチを使用することで、安全な法律上の基盤を確保できます。

iOS 用に実装したアプローチは、Android デバイス用にほぼ同じです。Google Play Store は、Apple と同じ制限を設けていません。したがって、Stripe Payment Links のアプローチを使用するだけで、特別な披露ダイアログを必要とせずに、同じアプローチを使用できます。

デープ リンキング (iOS の Universal Links と同等) を処理するには、次の手順を実行してください:

  1. App Linkの設定 AndroidManifest.xml __CAPGO_KEEP_0__でリダイレクトURLを処理する
  2. Capgoの .well-known/assetlinks.json __CAPGO_KEEP_0__にアプリの詳細を記載したファイルを作成する
  3. 同じ appUrlOpen リスナーロジックを使用して成功した支払いを処理する

The beauty of Capacitor is that once you’ve implemented the platform-specific configurations, the actual payment flow code remains the same across both platforms.

支払いUIの作成

Vueで使用できる支払いボタンコンポーネントの例です。これをあなたのCapacitorアプリに追加できます。

<template>
  <div class="payment-container">
    <div class="pricing-card">
      <h2 class="mb-4 text-xl font-bold">{{ product.name }}</h2>
      <p class="mb-6 text-gray-600">{{ product.description }}</p>
      <div class="mb-6 price-tag">
        <span class="text-2xl font-bold">${{ product.price }}</span>
        <span v-if="product.isSubscription" class="text-sm text-gray-500">/month</span>
      </div>
      <button 
        @click="handlePayment" 
        class="py-3 w-full font-medium text-white bg-indigo-600 rounded-lg transition-colors hover:bg-indigo-700"
      >
        Purchase Now
      </button>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import { Dialog } from '@capacitor/dialog';

const props = defineProps({
  product: {
    type: Object,
    required: true
  },
  userEmail: {
    type: String,
    default: ''
  },
  userId: {
    type: String,
    required: true
  }
});

const isLoading = ref(false);

async function showExternalPaymentDisclosure() {
  const { value } = await Dialog.confirm({
    title: 'Leaving App for Payment',
    message: 'You are about to leave this app to make a payment. Apple is not responsible for the privacy or security of payments that are not made through the App Store. All payment-related issues, including refunds, must be handled by our support team.',
    okButtonTitle: 'Continue',
    cancelButtonTitle: 'Cancel'
  });
  
  return value;
}

async function openPaymentLink() {
  // Use your actual Stripe payment link
  const baseUrl = 'https://buy.stripe.com/your_payment_link';
  
  // Add URL parameters to customize the experience
  const params = new URLSearchParams({
    prefilled_email: encodeURIComponent(props.userEmail),
    client_reference_id: props.userId
  });

  const fullUrl = `${baseUrl}?${params.toString()}`;
  
  // Simple window.open works in both web and Capacitor
  // Using _blank opens in Safari on iOS which is important for users with saved Stripe Link credentials
  window.open(fullUrl, '_blank');
}

async function handlePayment() {
  isLoading.value = true;
  try {
    // Only show the disclosure on iOS
    if (window.Capacitor?.getPlatform() === 'ios') {
      const userConfirmed = await showExternalPaymentDisclosure();
      if (!userConfirmed) return;
    }
    
    await openPaymentLink();
  } catch (error) {
    console.error('Payment error:', error);
    await Dialog.alert({
      title: 'Payment Error',
      message: 'There was an error initiating the payment. Please try again.'
    });
  } finally {
    isLoading.value = false;
  }
}
</script>

地域の差異の処理

新しいAppleガイドラインは、米国App Storeのアプリのみに適用されるため、ユーザーの地域を検出して適切な支払い方法を適用するための戦略が必要になります。IP地理情報を使用したより信頼性の高いアプローチを紹介します。

import { Capacitor } from '@capacitor/core';

async function determinePaymentMethod() {
  // Always use Stripe for Android
  if (Capacitor.getPlatform() !== 'ios') {
    return 'external';
  }
  
  try {
    // Use a geolocation service to determine user's country
    const response = await fetch('https://ipapi.co/json/');
    const locationData = await response.json();
    
    // Check if the user is in the United States
    if (locationData.country_code === 'US') {
      return 'external'; // Can use Stripe Payment Links
    } else {
      return 'iap'; // Must use In-App Purchases
    }
  } catch (error) {
    console.error('Error detecting region:', error);
    return 'iap'; // Default to IAP to be safe
  }
}

export async function processPayment(product, userEmail, userId) {
  const paymentMethod = await determinePaymentMethod();
  
  if (paymentMethod === 'external') {
    // Use Stripe Payment Links
    await initiateExternalPayment(userEmail, userId);
  } else {
    // Use Apple's In-App Purchase
    await initiateInAppPurchase(product.appleProductId);
  }
}

このアプローチは無料の ipapi.co IPアドレスを使用してユーザーの国を判断するサービスがあります。MaxMindなどの他の地理位置サービスも使用できます。ただし、セキュリティのためにこのチェックをサーバー側で実行することもできます。

注意: IP地理位置は常に100%正確ではありません。 mission-criticalアプリケーションでは、複数の検出方法を使用するか、ユーザーに地域を手動で選択させることを検討してください。

More Accurate Location Detection with Capacitor Plugins

より正確な場所検出機能を使用するには、Capacitor プラグインと @capgo/capacitor-nativegeocoder を使用して、ユーザーの国をより正確に判断できます。

  1. 必要なプラグインをインストールする
npm install @capacitor/geolocation @capgo/capacitor-nativegeocoder
  1. Capacitor プロジェクトでプラグインを設定します。次の設定を追加してください。 capacitor.config.ts:
import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  // Your existing app configuration (appId, appName, etc.)
  plugins: {
    Geolocation: {
      // Request precise location access on iOS
      iosLocationAccuracy: 'reduced'
    }
  }
};

export default config;
  1. 場所に基づく地域検出を実装する
import { Capacitor } from '@capacitor/core';
import { Geolocation } from '@capacitor/geolocation';
import { NativeGeocoder } from '@capgo/capacitor-nativegeocoder';

async function isUserInUSA() {
  try {
    // Request permission first
    const permissionStatus = await Geolocation.requestPermissions();
    
    if (permissionStatus.location === 'granted') {
      // Get current position
      const position = await Geolocation.getCurrentPosition({
        timeout: 10000,
        enableHighAccuracy: false
      });
      
      // Use NativeGeocoder to reverse geocode the coordinates
      const results = await NativeGeocoder.reverseGeocode({
        latitude: position.coords.latitude,
        longitude: position.coords.longitude,
        useLocale: true,
        maxResults: 1
      });
      
      if (results.addresses.length > 0) {
        // Check if the user is in the USA
        return results.addresses[0].countryCode === 'US';
      }
    }
    
    // If we couldn't determine location or permission denied, fall back to IP detection
    return await isUserInUSAByIP();
  } catch (error) {
    console.error('Error detecting location:', error);
    // Fall back to IP detection on error
    return await isUserInUSAByIP();
  }
}

async function isUserInUSAByIP() {
  try {
    const response = await fetch('https://ipapi.co/json/');
    const data = await response.json();
    return data.country_code === 'US';
  } catch (error) {
    console.error('Error detecting IP location:', error);
    return false; // Default to false to be safe
  }
}

export async function determinePaymentMethod() {
  // Always use Stripe for Android
  if (Capacitor.getPlatform() !== 'ios') {
    return 'external';
  }
  
  // Check if user is in the USA
  const isUSA = await isUserInUSA();
  return isUSA ? 'external' : 'iap';
}

export async function processPayment(product, userEmail, userId) {
  const paymentMethod = await determinePaymentMethod();
  
  if (paymentMethod === 'external') {
    // Use Stripe Payment Links
    await initiateExternalPayment(userEmail, userId);
  } else {
    // Use Apple's In-App Purchase
    await initiateInAppPurchase(product.appleProductId);
  }
}

この実装では、ユーザーが物理的にアメリカにいるかどうかをより正確に判断できます。まず、デバイスのGPSとネイティブジオコーダーを使用して国を判断します。失敗した場合 (パーミッションの問題やその他のエラー)、IPベースの検出にフォールバックします。

必要なパーミッションを追加する info.plist (iOS) と AndroidManifest.xml (Android) ファイルに必要なパーミッションを追加してください。

iOS (ios/App/App/Info.plist):

<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to determine which payment method to use based on regional availability.</string>

Android (android/app/src/main/AndroidManifest.xml):

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

このアプローチは、Apple の新しいガイドライン下で外部の支払いオプションに適格であるかどうかを決定する最も正確な方法を提供します。

サブスクリプションの管理

Capacitor アプリでサブスクリプションの管理を行う方法について説明します。

1. サブスクリプション管理ページの作成

__CAPGO_KEEP_0__ アプリにサブスクリプション管理ページを追加して、ユーザーの有効なサブスクリプションを表示します。

<template>
  <div class="subscription-manager">
    <div v-if="isLoading" class="loading-indicator">
      Loading subscription data...
    </div>
    
    <div v-else-if="subscription" class="subscription-info">
      <h2 class="mb-4 text-xl font-bold">Your Subscription</h2>
      
      <div class="mb-6 plan-details">
        <p><span class="font-medium">Plan:</span> {{ subscription.planName }}</p>
        <p><span class="font-medium">Status:</span> {{ subscription.status }}</p>
        <p><span class="font-medium">Renews:</span> {{ formatDate(subscription.currentPeriodEnd) }}</p>
      </div>
      
      <button 
        @click="manageSubscription" 
        class="py-3 w-full font-medium text-white bg-indigo-600 rounded-lg transition-colors hover:bg-indigo-700"
      >
        Manage Subscription
      </button>
    </div>
    
    <div v-else class="no-subscription">
      <p class="mb-4">You don't have an active subscription.</p>
      <button 
        @click="goToPricingPage" 
        class="py-3 w-full font-medium text-white bg-indigo-600 rounded-lg transition-colors hover:bg-indigo-700"
      >
        View Plans
      </button>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { getUserSubscription } from '../services/subscription';

const subscription = ref(null);
const isLoading = ref(true);

onMounted(async () => {
  try {
    const userData = await getUserSubscription();
    subscription.value = userData.subscription;
  } catch (error) {
    console.error('Failed to load subscription:', error);
  } finally {
    isLoading.value = false;
  }
});

function formatDate(timestamp) {
  return new Date(timestamp * 1000).toLocaleDateString();
}

function manageSubscription() {
  // Open Stripe Customer Portal
  window.open(subscription.value.portalUrl, '_blank');
}

function goToPricingPage() {
  // Navigate to pricing page
  // router.push('/pricing');
}
</script>

2. サブスクリプション管理用のカスタマーポータル

Stripe は、ユーザーがサブスクリプションを管理できるカスタマーポータルを提供しています。このポータルへのリンクを作成するには、サーバーから実行します。

// Server-side code (Node.js)
const stripe = require('stripe')('sk_your_stripe_secret_key');

async function createPortalSession(customerId) {
  const session = await stripe.billingPortal.sessions.create({
    customer: customerId,
    return_url: 'https://yourdomain.com/account',
  });
  
  return session.url;
}

App Store の規制に適合する

Apple のガイドラインに適合するように実装するには、以下の点に注意してください。

  1. 外部購入に関する適切な披露を含める
  2. Appleの規定に従って、ユーザーがアプリを離れることを通知するモーダルシートを実装する
  3. アプリ内で購入された場合のAppleのコミッションを回避することはできない
  4. Appleはトランザクションの責任を負わないことをユーザーに明確に伝える

必要な開示モーダルを実装する例

import { Dialog } from '@capacitor/dialog';

async function showExternalPaymentDisclosure() {
  const { value } = await Dialog.confirm({
    title: 'Leaving App for Payment',
    message: 'You are about to leave this app to make a payment. Apple is not responsible for the privacy or security of payments that are not made through the App Store. All payment-related issues, including refunds, must be handled by our support team.',
    okButtonTitle: 'Continue',
    cancelButtonTitle: 'Cancel'
  });
  
  return value;
}

export async function initiateExternalPayment(userEmail, userId) {
  const userConfirmed = await showExternalPaymentDisclosure();
  
  if (userConfirmed) {
    await openPaymentLink(userEmail, userId);
  }
}

実装をテストする

実装をテストするには

  1. アプリ内で支払いボタンをクリックし、開示を表示し、ストライプの支払いページを開く
  2. ストライプのテストカードを使用してテスト支払いを完了する 4242 4242 4242 4242
  3. Universal Linkを介してアプリに戻されることを確認する
  4. Webhookがイベントを受信したことを確認する checkout.session.completed イベント

まとめ

iOSアプリでデジタル商品に対する外部支払いオプションを使用できるようになったことは、開発者にとって大きな変化です。

By using Stripe Payment Links with Capacitor, you can quickly implement a streamlined checkout experience while maintaining compliance with Apple’s guidelines. For users outside the U.S. where Apple’s in-app purchase system still applies, capgoでStripe Payment Linksを使用すると、Appleのガイドラインに準拠しながら、迅速かつ簡素化されたチェックアウトエクスペリエンスを実装できます。 アメリカ以外の地域では、Appleのインアプリ購入システムが適用されるため、

@__CAPGO_KEEP_0__/native-purchases

Have you implemented Stripe Payment Links in your Capacitor app? Share your experience in the comments below!

このアプローチでは、すべての顧客サポートと返金問題を直接処理する必要があります。これらの取引はAppleのエコシステム外で発生するためです。

__CAPGO_KEEP_0__アプリでStripe Payment Linksを実装しましたか?コメント欄でご意見をご覧ください!
FAQs

Q: このアプローチはAppleのガイドラインに準拠していますか?
A: いいえ、新しい規則の主な利点の1つは、Appleのシステム外で処理される支払いは、Appleのコミッションの対象外となることです。

Q: これらの新しい規則を利用するには、会社がアメリカに本社を置く必要がありますか?
A: いいえ、世界中のどの会社も、AppがアメリカのApp Storeで利用可能であり、購入を実行するユーザーがアメリカにいる場合、外部の支払い方法を実装できます。この規則は、市場(アメリカのApp Store)とユーザーの位置、ではなく、会社の位置に適用されます。これは、ヨーロッパ、アジア、南アメリカ、またはどこからでも開発者が、米国に拠点を置く顧客向けにStripe Payment Linksを実装できることを意味します。

Q: 米国外のユーザーが外部の支払いオプションを使用しようとした場合に何が起こりますか?
A: 米国外のユーザーに外部の支払いオプションを提供する前に、地域の検出(記事で示されているように)を実装する必要があります。米国以外の地域では、Appleのインアプリ購入システムを継続して使用する必要があります。

Q: この機能を使用して、外部のアプリ内で購入した物理商品やサービスを利用できますか?
A: はい、Appleは常に外部の支払い方法を物理商品やサービス(乗り物のシェアリングや食事の配達など)を外部のアプリ内で購入した場合に許可しています。

Capacitor

__CAPGO_KEEP_0__ これを使用して、セキュリティとコンプライアンスを計画する場合は、Capacitorを接続してください。 __CAPGO_KEEP_0__ __CAPGO_KEEP_0__ 暗号化の実装詳細については 法的合致 法的合致の実装詳細については Capgo セキュリティ スキャナー Capgo セキュリティ スキャナーの製品ワークフローについては Capgo セキュリティ Capgo セキュリティの製品ワークフローについては Capgo トラスト センター Capgo トラスト センターの製品ワークフローについては

Capacitorアプリのリアルタイム更新

Capgoを使用して、ウェブ層のバグが生じた場合、即時修正を配信して、アプリストアの承認待ちの日数を省きます。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残ります。

今すぐ始めましょう

ブログの最新記事

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。