> For the complete documentation index, see [llms.txt](https://documentation.pushly.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.pushly.com/pushly-ja/integration/implementation-steps/apple-ios/sdk-swift-obj-c/e-commerce-support.md).

# コマースとカタログアイテムのイベント

このガイドでは、iOS SDKを使用して、コマースおよびカタログ関連のユーザーインタラクションをPushlyに送信する方法を説明します。これらのイベントは、カート放棄通知、保存アイテムのリマインダー、収益アトリビューション、カタログ駆動のレコメンドキャンペーンなどの機能を支えます。

以下に説明するいずれのイベントを送信する前にも、Pushly iOS SDKを読み込み、初期化しておく必要があります。

{% hint style="info" %}
以下の手順は、アイテムカタログ/フィードを当社チームに提供することを前提としています。このプロセスの詳細は担当アカウントマネージャーにお問い合わせください。
{% endhint %}

### 対応するインタラクションタイプ

Pushlyは次のコマースおよびカタログのインタラクションに対応しています:

* **view\_item** – ユーザーがアイテム詳細ページを閲覧する
* **save\_item** – ユーザーがアイテムを保存、またはお気に入り登録する
* **unsave\_item** – ユーザーが保存済みアイテムを削除、またはお気に入りを解除する
* **complete\_item** – ユーザーがアイテムを完了する
* **uncomplete\_item** – ユーザーが完了済みアイテムを取り消す
* **rate\_item** – ユーザーがアイテムを評価する
* **unrate\_item** – ユーザーがアイテムの評価を削除する
* **add\_to\_cart** – ユーザーがアイテムをカートに追加する
* **update\_cart** – ユーザーがカートの内容や数量を変更する
* **purchase** – ユーザーが取引を完了する

各インタラクションは、カタログ設定に応じて3種類の識別子タイプのいずれかを使用してアイテムを参照できます。

各アイテムには `id`が必要です。数量と評価は、特記がない限り任意です。

{% hint style="danger" %}
次のコードスニペットはすべて実行する必要があります **SDKが初期化された** 後に。
{% endhint %}

### アイテムを表示

ユーザーがアイテム詳細ページを閲覧したときにこのイベントを送信します。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.viewItem(item: CatalogItem(id: "ITEM_ID"))
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
CatalogItem *item = [[CatalogItem alloc] initWithId:@"ITEM_ID"];
[PushSDKUserProfile viewItemWithItem:item];
```

{% endtab %}
{% endtabs %}

### アイテムを保存

ユーザーがアイテムを保存、お気に入り登録、またはブックマークしたときにこのイベントを使用します。これにより、保存アイテムのリマインドキャンペーンが可能になります。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.saveItem(item: CatalogItem(id: "ITEM_ID"))
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
[PushSDKUserProfile saveItemWithItem:
    [[CatalogItem alloc] initWithId:@"ITEM_ID"]
];
```

{% endtab %}
{% endtabs %}

### 保存解除

ユーザーが保存リスト、お気に入り、またはブックマークからアイテムを削除したときにこのイベントを使用します。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.unsaveItem(
    item: CatalogItem(id: "ITEM_ID")
)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
[PushSDKUserProfile unsaveItemWithItem:
    [[CatalogItem alloc] initWithId:@"ITEM_ID"]
];
```

{% endtab %}
{% endtabs %}

### アイテムを完了

ユーザーが、想定された体験を完了した後にアイテムを完了済みとしてマークします。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.completeItem(
    item: CatalogItem(id: "ITEM_ID")
)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
[PushSDKUserProfile completeItemWithItem:
    [[CatalogItem alloc] initWithId:@"ITEM_ID"]
];
```

{% endtab %}
{% endtabs %}

### 完了解除

アイテムの完了状態を取り消すには、このイベントを使用します。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.uncompleteItem(
    item: CatalogItem(id: "ITEM_ID")
)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
[PushSDKUserProfile uncompleteItemWithItem:
    [[CatalogItem alloc] initWithId:@"ITEM_ID"]
];
```

{% endtab %}
{% endtabs %}

### アイテムを評価

この `rate_item` イベントには任意の `評価` プロパティが含まれます。指定する場合は、 `評価` は次の範囲の数値である必要があります: **0〜100** を含み、 **小数点以下1桁まで**.

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.rateItem(
    item: CatalogItem(id: "ITEM_ID", rating: 95)
)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
CatalogItem *item = [[CatalogItem alloc] initWithId:@"ITEM_ID" rating:@95];
[PushSDKUserProfile rateItemWithItem:item];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
この `評価` 値は、製品本来の尺度を反映したものにしてください。ユースケースに合う範囲を自由に使用できます（例: 星評価なら1〜5、スコアなら0〜10、割合形式の評価なら1〜100）。唯一の要件は、値が0〜100の範囲内で、小数点以下1桁を超えないことです。
{% endhint %}

### 評価取消

ユーザーがアイテムの評価を削除したときにこのイベントを使用します。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.unrateItem(
    item: CatalogItem(id: "ITEM_ID")
)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
[PushSDKUserProfile unrateItemWithItem:
    [[CatalogItem alloc] initWithId:@"ITEM_ID"]
];
```

{% endtab %}
{% endtabs %}

### カートに追加

ユーザーが1つ以上のアイテムをカートに追加するたびにこのイベントを送信します。Pushlyは複数回の呼び出しにわたってカートの状態を蓄積します。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.addToCart(items: [
    CatalogItem(id: "ITEM_ID", quantity: 2)
])
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
NSArray *items = @[
    [[CatalogItem alloc] initWithId:@"ITEM_ID" quantity:2]
];
[PushSDKUserProfile addToCartWithItems:items];
```

{% endtab %}
{% endtabs %}

必要に応じて `add_to_cart` 訪問者のカート内のすべてのアイテムを追跡するために何度でも呼び出せます。顧客のカート内で購入されていないアイテムに対しては、カート放棄通知が送信される場合があります。

購入が行われると、訪問者のカートは空になり、購入済みアイテムに関する通知は訪問者に送信されません。

### カートを更新

ユーザーが数量の調整やアイテムの削除など、購入を完了せずにカートを変更したときにこのイベントを使用します。

カートからアイテムを削除するには、 `update_cart` 現在のカート情報をすべて指定して次のメソッドを呼び出します（削除するアイテムは除外します）:

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.updateCart(withItems: [
    CatalogItem(id: "ITEM_1", quantity: 1),
    CatalogItem(id: "ITEM_2", quantity: 2)
])
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
NSArray *items = @[
    [[CatalogItem alloc] initWithId:@"ITEM_1" quantity:1],
    [[CatalogItem alloc] initWithId:@"ITEM_2" quantity:2]
];
[PushSDKUserProfile updateCartWithItems:items];
```

{% endtab %}
{% endtabs %}

あるいは、カートが完全に空になっている場合は空の配列を指定します:

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.updateCart(withItems: [])
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
[PushSDKUserProfile updateCartWithItems:@[]];
```

{% endtab %}
{% endtabs %}

### 購入

チェックアウトが成功した後にこのイベントを送信します。これにより、カート放棄状態がクリアされ、収益アトリビューションが有効になります。

{% tabs %}
{% tab title="Swift" %}

```swift
PushSDK.UserProfile.trackPurchase(
    of: [
        CatalogItem(id: "ITEM_1"),
        CatalogItem(id: "ITEM_2", quantity: 2)
    ],
    withPurchaseId: "ORDER_123",
    withPriceValue: "49.99"
)
```

{% endtab %}

{% tab title="Objective-C" %}

```objective-c
NSArray *items = @[
    [[CatalogItem alloc] initWithId:@"ITEM_1"],
    [[CatalogItem alloc] initWithId:@"ITEM_2" quantity:2]
];

[PushSDKUserProfile trackPurchaseWithItems:items
                      withPurchaseId:@"ORDER_123"
                     withPriceValue:@"49.99"];
```

{% endtab %}
{% endtabs %}

#### 購入フィールド

* **priceValue** – ドメインに設定された通貨での購入合計金額
* **purchaseId** – 一意の注文識別子

もし `purchase` イベントがアイテムデータなしで送信された場合でも、Pushlyはユーザーのカート状態を引き続きクリアします。

#### 通貨の取り扱い

`price_value` は、プラットフォームのドメイン設定でそのドメインに設定された通貨で指定する必要があります。

小数点としてピリオド（`.`）を、ロケールに関係なくすべての通貨の小数点区切りとして使用してください。カンマは使用しないでください。

例:

* USD: `"344.33"`
* JPY: `"5000"`

### 必須フィールドの概要

* `id` はすべてのアイテムで必須です
* `quantity` は、カートや購入の数量を追跡する場合のみ必須です
* `評価` は、アイテムを評価する場合のみ必須です

### 実装のベストプラクティス

イベントの取りこぼしを避けるため、ページのライフサイクルの早い段階でSDKを初期化してください。

すべてのインタラクションタイプで一貫したアイテムIDを使用し、Pushlyが行動を正しく関連付けられるようにしてください。

トリガー `purchase` 誤ったカート放棄通知を避けるため、可能な限り信頼できる確認ステップからイベントを発火してください。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://documentation.pushly.com/pushly-ja/integration/implementation-steps/apple-ios/sdk-swift-obj-c/e-commerce-support.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
