# SDKコールバック

{% hint style="danger" %}
すべての SDK コールバックは、アプリケーションのメイン `onCreate` メソッド内に配置して、すべてのイベントを適切に処理できるようにすることを推奨します。
{% endhint %}

## SDK ライフサイクルコールバック

これらのコールバックは、SDK の読み込みと終了を監視するために実装できます。

これらのコールバックを実装するには、SDK の `registerSDKLifecycleCallbacks` メソッドを使用し、その中でコールバックを実装できます。

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

```kotlin
PushSDK.registerPushSDKLifecycleCallbacks(object : PNPushSDKLifecycleCallbacks {
    // ここに関数のオーバーライドを追加
})
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.registerPushSDKLifecycleCallbacks(new PNPushSDKLifecycleCallbacks() {
    // ここに関数のオーバーライドを追加
});
```

{% endtab %}
{% endtabs %}

利用可能な SDK ライフサイクルコールバックは次のとおりです:

### 読み込み完了

このコールバックは、SDK の初期化が完了し、操作可能になったときに実行されます。

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

```kotlin
override fun onPushSDKDidFinishLoading(configuration: PNApplicationConfig, subscriberStatus: PNSubscriberStatus) {
    // SDK の読み込み完了後に実行するコードを追加
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
public void onPushSDKDidFinishLoading(@NonNull PNApplicationConfig configuration, @NonNull PNSubscriberStatus subscriberStatus) {
    // SDK の読み込み完了後に実行するコードを追加
}
```

{% endtab %}
{% endtabs %}

## 権限ライフサイクルコールバック

これらのコールバックは、ユーザーの権限承認の変更を監視するために実装できます。

これらのコールバックを実装するには、SDK の `registerPermissionLifecycleCallbacks` メソッドを使用し、その中でコールバックを実装できます。

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

```kotlin
PushSDK.registerPermissionLifecycleCallbacks(object : PNPermissionLifecycleCallbacks {
    // ここに関数のオーバーライドを追加
})
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.registerPermissionLifecycleCallbacks(new PNPermissionLifecycleCallbacks() {
    // ここに関数のオーバーライドを追加
});
```

{% endtab %}
{% endtabs %}

利用可能な権限ライフサイクルコールバックは次のとおりです:

### 権限ステータスの変更

このコールバックは、ユーザーの権限ステータス/認可が変更されたときに実行されます。

「 `response` 変数はユーザーの **新しい** 権限ステータス。

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

```kotlin
override fun onPushSDKDidReceivePermissionResponse(response: PNPermissionResponse) {
    // ユーザーの通知権限が変更された後に実行するコードを追加
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
public void onPushSDKDidReceivePermissionResponse(@NonNull PNPermissionResponse response) {
    // ユーザーの通知権限が変更された後に実行するコードを追加
}

```

{% endtab %}
{% endtabs %}

## 通知ライフサイクルコールバック

これらのコールバックは、インプレッション、開封、その他の通知とのやり取りなどのイベントを監視するために実装できます。

これらのコールバックを実装するには、SDK の `registerNotificationLifecycleCallbacks` メソッドを使用し、その中でコールバックを実装できます。

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

```kotlin
PushSDK.registerNotificationLifecycleCallbacks(object : PNNotificationLifecycleCallbacks {
    // ここに関数のオーバーライドを追加
})
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.registerNotificationLifecycleCallbacks(new PNNotificationLifecycleCallbacks() {
    // ここに関数のオーバーライドを追加
});
```

{% endtab %}
{% endtabs %}

利用可能な通知ライフサイクルコールバックは次のとおりです:

### 通知受信

このコールバックは、ユーザーが通知を受信したときに実行されます

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

```kotlin
override fun onPushSDKDidReceiveRemoteNotification(notification: PNNotification) {
    // サブスクライバーのデバイスが通知を受信した後に実行するコードを追加
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
public void onPushSDKDidReceiveRemoteNotification(@NonNull PNNotification notification) {
    // サブスクライバーのデバイスが通知を受信した後に実行するコードを追加
}
```

{% endtab %}
{% endtabs %}

### URI/URL 宛先付きで通知が開かれた場合

このコールバックは、ランディング URL が付与された通知が開かれたときに実行されます。サブスクライバーは、その URL を表すビューへ移動させる必要があります。

このメソッドは Boolean の応答を想定しています。応答が `true` の場合、SDK はこの通知の開封に対して追加のアクションを実行しません。応答が `false` の場合、SDK は購読者を宛先 URL へ遷移させようとします。

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

```kotlin
override fun onPushSDKDidReceiveNotificationDestination(destination: String, interaction: PNNotificationInteraction): Boolean {
    // destination（ランディング URL）を使用して、アプリケーション内のアクティビティへ遷移する

    // SDK に対して遷移しないよう通知するために true を返す
    return true
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
public boolean onPushSDKDidReceiveNotificationDestination(@NonNull String destination, @NonNull PNNotificationInteraction pnNotificationInteraction) {
    // destination（ランディング URL）を使用して、アプリケーション内のアクティビティへ遷移する

    // SDK に対して遷移しないよう通知するために true を返す
    return true;
}
```

{% endtab %}
{% endtabs %}

次を参照してください。 [ディープリンク](https://documentation.pushly.com/pushly-ja/integration/implementation-steps/android/sdk-kotlin-java/dpurinku) 完全な例についてはドキュメントを参照してください。

## アプリメッセージライフサイクルコールバック

これらのコールバックは、インプレッション、開封、その他のアプリメッセージとのやり取りなどのイベントを監視するために実装できます。

これらのコールバックを実装するには、SDK の `registerAppMessageLifecycleCallbacks` メソッドを使用し、その中でコールバックを実装できます。

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

```kotlin
PushSDK.registerAppMessageLifecycleCallbacks(object : PNAppMessageLifecycleCallbacks {
    // ここに関数のオーバーライドを追加
})
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.registerAppMessageLifecycleCallbacks(new PNAppMessageLifecycleCallbacks() {
    // ここに関数のオーバーライドを追加
});
```

{% endtab %}
{% endtabs %}

利用可能なアプリメッセージライフサイクルコールバックは次のとおりです:

### アプリメッセージ表示時

このコールバックは、アプリメッセージがユーザーに表示されたときに実行されます。

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

```kotlin
override fun onPushSDKWillPresentAppMessage(appMessage: PNAppMessage) {
    // ユーザーのデバイスにアプリメッセージが表示されたときに実行するコードを追加
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
public void onPushSDKWillPresentAppMessage(@NonNull PNAppMessage appMessage) {
    // ユーザーのデバイスにアプリメッセージが表示されたときに実行するコードを追加
}
```

{% endtab %}
{% endtabs %}

### アプリメッセージでユーザーが操作したとき

このコールバックは、ユーザーがアプリメッセージとやり取りしたときに実行されます。

このメソッドは Boolean の応答を想定しています。応答が `true` その場合、SDK はそのインタラクションを処理せず、Open URL アクションの場合もナビゲーションを試みません。応答が `false` の場合、SDK はそのインタラクションを処理し、インタラクションが Open URL アクションの場合は、 `open` メソッド内に追加します。

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

```kotlin
override fun onPushSDKDidReceiveAppMessageInteraction(interaction: PNAppMessageInteraction, appMessage: PNAppMessage): Boolean {
    // ユーザーがアプリメッセージとやり取りしたときに実行するコードを追加
    
    // SDK がそのインタラクションを処理しないようにするには true を返します
    return true
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
public boolean onPushSDKDidReceiveAppMessageInteraction(@NonNull PNAppMessageInteraction interaction, @NonNull PNAppMessage appMessage) {
    // destination（ランディング URL）を使用して、アプリケーション内のアクティビティへ遷移する

    // SDK に対して遷移しないよう通知するために true を返す
    return true;
}
```

{% endtab %}
{% endtabs %}
