ÿÿ オンボーディングã®è¡¨ç¤º | Adapty ドキュメント

Flutter SDKã§ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’表示ã™ã‚‹

オンボーディング㯠SDK v4 ã§éžæŽ¨å¥¨ã¨ãªã‚Šã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れる予定ã§ã™ã€‚ ãƒã‚°ä¿®æ­£ã‚„改善ã¯è¡Œã‚れã¾ã›ã‚“。代ã‚り㫠フロー を使用ã—ã¦ãã ã•ã„。オンボーディング㌠WebView 内ã§å‹•作ã™ã‚‹ã®ã¨ã¯ç•°ãªã‚Šã€ãƒ•ローã¯ãƒ‡ãƒã‚¤ã‚¹ä¸Šã§ãƒã‚¤ãƒ†ã‚£ãƒ–ã«ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れるãŸã‚ã€ã‚¹ãƒ ãƒ¼ã‚ºãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã€ä¸€è²«ã—ãŸãƒã‚¤ãƒ†ã‚£ãƒ–ã®å¤–観ã€é«˜é€Ÿãªèª­ã¿è¾¼ã¿ã€ãã—㦠WebView ランタイムã¸ã®ä¾å­˜ãŒã‚りã¾ã›ã‚“。開始ã™ã‚‹ã«ã¯ フローã¨ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®å–å¾— ãŠã‚ˆã³ フローã¨ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®è¡¨ç¤º ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

ビルダーを使用ã—ã¦ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’カスタマイズã—ãŸå ´åˆã€Flutterアプリã®ã‚³ãƒ¼ãƒ‰ã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。ãã®ã‚ˆã†ãªã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«ã¯ã€è¡¨ç¤ºã™ã‚‹å†…容ã¨è¡¨ç¤ºæ–¹æ³•ã®ä¸¡æ–¹ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚

å§‹ã‚ã‚‹å‰ã«ã€ä»¥ä¸‹ã‚’確èªã—ã¦ãã ã•ã„:

  1. Adapty Flutter SDK 3.8.0以é™ã‚’インストールã—ã¦ã„ã‚‹ã“ã¨ã€‚
  2. オンボーディングを作æˆã—ã¦ã„ã‚‹ã“ã¨ã€‚
  3. オンボーディングをプレースメントã«è¿½åŠ ã—ã¦ã„ã‚‹ã“ã¨ã€‚

Adapty Flutter SDKã«ã¯ã€ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’表示ã™ã‚‹æ–¹æ³•ãŒ2ã¤ã‚りã¾ã™ï¼š

  • スタンドアロン画é¢

  • 埋ã‚è¾¼ã¿ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆ

スタンドアロンスクリーンã¨ã—ã¦è¡¨ç¤ºã™ã‚‹

オンボーディングをスタンドアロンスクリーンã¨ã—ã¦è¡¨ç¤ºã™ã‚‹ã«ã¯ã€createOnboardingView メソッドã§ä½œæˆã—㟠onboardingView ã«å¯¾ã—㦠onboardingView.present() メソッドを呼ã³å‡ºã—ã¾ã™ã€‚å„ view ã¯ä¸€åº¦ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“。オンボーディングをå†åº¦è¡¨ç¤ºã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€createOnboardingView ã‚’ã‚‚ã†ä¸€åº¦å‘¼ã³å‡ºã—ã¦æ–°ã—ã„ onboardingView インスタンスを作æˆã—ã¦ãã ã•ã„。

åŒã˜ onboardingView ã‚’å†ä½œæˆã›ãšã«å†åˆ©ç”¨ã™ã‚‹ã¨ã€AdaptyUIError.viewAlreadyPresented エラーãŒç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾ã™ã€‚

try {
  await onboardingView.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

オンボーディングを閉ã˜ã‚‹

プログラムã§ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’é–‰ã˜ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€dismiss() メソッドを使用ã—ã¾ã™ï¼š

try {
  await onboardingView.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

iOS ã®è¡¨ç¤ºã‚¹ã‚¿ã‚¤ãƒ«ã‚’設定ã™ã‚‹

present() メソッド㫠iosPresentationStyle パラメータを渡ã™ã“ã¨ã§ã€iOS ã§ã®ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®è¡¨ç¤ºæ–¹æ³•を設定ã§ãã¾ã™ã€‚ã“ã®ãƒ‘ラメータã«ã¯ AdaptyUIIOSPresentationStyle.fullScreen(デフォルト)ã¾ãŸã¯ AdaptyUIIOSPresentationStyle.pageSheet を指定ã§ãã¾ã™ã€‚

try {
  await onboardingView.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

ウィジェット階層ã¸ã®åŸ‹ã‚è¾¼ã¿

既存ã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãƒ„リーã«ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’埋ã‚込むã«ã¯ã€Flutterã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆéšŽå±¤ã«AdaptyUIOnboardingPlatformViewウィジェットを直接使用ã—ã¾ã™ã€‚

AdaptyUIOnboardingPlatformView(
  onboarding: onboarding, // The onboarding object you fetched
  onDidFinishLoading: (meta) {
  },
  onDidFailWithError: (error) {
  },
  onCloseAction: (meta, actionId) {
  },
  onPaywallAction: (meta, actionId) {
  },
  onCustomAction: (meta, actionId) {
  },
  onStateUpdatedAction: (meta, elementId, params) {
  },
  onAnalyticsEvent: (meta, event) {
  },
)

Android ã®ãƒ—ラットフォームビューを動作ã•ã›ã‚‹ã«ã¯ã€MainActivity ㌠FlutterFragmentActivity を継承ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„:

class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

オンボーディング中ã®ãƒ­ãƒ¼ãƒ€ãƒ¼

オンボーディングを表示ã™ã‚‹éš›ã€ã‚¹ãƒ—ラッシュ画é¢ã¨ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®é–“ã«ã€åŸºç›¤ã¨ãªã‚‹ãƒ“ューã®åˆæœŸåŒ–中ã«çŸ­ã„ローディング画é¢ãŒè¡¨ç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€‚ã“れã¯ãƒ‹ãƒ¼ã‚ºã«å¿œã˜ã¦ã•ã¾ã–ã¾ãªæ–¹æ³•ã§å¯¾å‡¦ã§ãã¾ã™ã€‚

onDidFinishLoading を使用ã—ãŸã‚¹ãƒ—ラッシュ画é¢ã®åˆ¶å¾¡

ã“ã®ã‚¢ãƒ—ローãƒã¯ã€ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’ウィジェットã¨ã—ã¦åŸ‹ã‚込む場åˆã«ã®ã¿ä½¿ç”¨ã§ãã¾ã™ã€‚スタンドアロン画é¢ã¨ã—ã¦è¡¨ç¤ºã™ã‚‹å ´åˆã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。

推奨ã•れるクロスプラットフォームã®ã‚¢ãƒ—ローãƒã¯ã€ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒå®Œå…¨ã«èª­ã¿è¾¼ã¾ã‚Œã‚‹ã¾ã§ã‚¹ãƒ—ラッシュスクリーンやカスタムオーãƒãƒ¼ãƒ¬ã‚¤ã‚’表示ã—ãŸã¾ã¾ã«ã—ã¦ãŠãã€ãã®å¾Œæ‰‹å‹•ã§éžè¡¨ç¤ºã«ã™ã‚‹ã“ã¨ã§ã™ã€‚

埋ã‚è¾¼ã¿ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’使用ã™ã‚‹å ´åˆã¯ã€ãã®ä¸Šã«ç‹¬è‡ªã®ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã‚’オーãƒãƒ¼ãƒ¬ã‚¤ã—ã€onDidFinishLoading ãŒç™ºç«ã—ãŸã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ã‚ªãƒ¼ãƒãƒ¼ãƒ¬ã‚¤ã‚’éžè¡¨ç¤ºã«ã—ã¾ã™:

AdaptyUIOnboardingPlatformView(
  onboarding: onboarding,
  onDidFinishLoading: (meta) {
    // Hide your custom splash screen or overlay here
  },
  // ... other callbacks
)

ãƒã‚¤ãƒ†ã‚£ãƒ–ローダーをカスタマイズã™ã‚‹

ã“ã®ã‚¢ãƒ—ローãƒã¯ãƒ—ラットフォーム固有ã§ã‚りã€ãƒã‚¤ãƒ†ã‚£ãƒ– UI コードã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ãŒå¿…è¦ã§ã™ã€‚ã‚¢ãƒ—ãƒªã§æ—¢ã«åˆ¥ã®ãƒã‚¤ãƒ†ã‚£ãƒ–レイヤーをメンテナンスã—ã¦ã„ã‚‹å ´åˆã‚’除ãã€æŽ¨å¥¨ã—ã¾ã›ã‚“。

デフォルトã®ãƒ­ãƒ¼ãƒ€ãƒ¼è‡ªä½“をカスタマイズã—ãŸã„å ´åˆã¯ã€ãƒ—ラットフォーム固有ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚¢ãƒ—ローãƒã§ã¯ã€Android 㨠iOS ãれãžã‚Œã«å€‹åˆ¥ã®å®Ÿè£…ãŒå¿…è¦ã§ã™ï¼š

  • iOS: Xcode プロジェクト㫠AdaptyOnboardingPlaceholderView.xib を追加ã™ã‚‹
  • Android: res/layout ã« adapty_onboarding_placeholder_view.xml を作æˆã—ã€ãƒ—レースホルダーを定義ã™ã‚‹

オンボーディング内リンクã®é–‹ãæ–¹ã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã¯ã€Adapty SDK v3.15.1 以é™ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚

デフォルトã§ã¯ã€ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°å†…ã®ãƒªãƒ³ã‚¯ã¯ã‚¢ãƒ—リ内ブラウザã§é–‹ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ãƒ—リを切り替ãˆã‚‹ã“ã¨ãªã Web ページを閲覧ã§ãるシームレスãªä½“é¨“ãŒæä¾›ã•れã¾ã™ã€‚

外部ブラウザã§ãƒªãƒ³ã‚¯ã‚’é–‹ãよã†ã«å¤‰æ›´ã—ãŸã„å ´åˆã¯ã€externalUrlsPresentation パラメータを AdaptyWebPresentation.externalBrowser ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã“ã®å‹•作をカスタマイズã§ãã¾ã™ã€‚

セーフエリアã®ãƒ‘ディングを無効ã«ã™ã‚‹ï¼ˆAndroid)

デフォルトã§ã¯ã€Androidデãƒã‚¤ã‚¹ã«ãŠã„ã¦ã€ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãƒ“ューã¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒãƒ¼ã‚„ナビゲーションãƒãƒ¼ãªã©ã®ã‚·ã‚¹ãƒ†ãƒ UIè¦ç´ ã‚’é¿ã‘ã‚‹ãŸã‚ã€ã‚»ãƒ¼ãƒ•エリアã®ãƒ‘ディングを自動的ã«é©ç”¨ã—ã¾ã™ã€‚ãŸã ã—ã€ã“ã®å‹•作を無効ã«ã—ã¦ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’完全ã«åˆ¶å¾¡ã—ãŸã„å ´åˆã¯ã€ã‚¢ãƒ—リã«booleanåž‹ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’追加ã™ã‚‹ã“ã¨ã§å¯¾å¿œã§ãã¾ã™ã€‚

  1. android/app/src/main/res/values ã«ç§»å‹•ã—ã¾ã™ã€‚bools.xml ファイルãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€æ–°è¦ä½œæˆã—ã¦ãã ã•ã„。

  2. 以下ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’追加ã—ã¾ã™ã€‚

<resources>
    <bool name="adapty_onboarding_enable_safe_area_paddings">false</bool>
</resources>

変更ã¯ã‚¢ãƒ—リ内ã®ã™ã¹ã¦ã®ã‚ªãƒ³ãƒœãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«ã‚°ãƒ­ãƒ¼ãƒãƒ«ã«é©ç”¨ã•れã¾ã™ã€‚

ÿÿÿÿ