# SDKメソッド

## 権限ダイアログを手動で起動する

プラットフォーム経由で権限ダイアログの自動起動を無効にすることもできます。この場合、独自の基準に基づいてダイアログを起動するようにします（例: 訪問者がモーダル / ソフトプロンプトとやり取りした後、特定の画面/ページを訪問した後など）。

以下のコードでダイアログを手動で起動できます:

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

```kotlin
PushSDK.PushNotifications.showPermissionPrompt(completion = { granted, response, error ->
    // オプションのコールバック
    println("ユーザーが権限を許可しました: $granted")
}
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.PushNotifications.showPermissionPrompt((granted, response, error) -> {
    // オプションのコールバック
    System.out.printf("ユーザーが権限を許可しました: %b", granted);
    return null;
});
```

{% endtab %}
{% endtabs %}

## 購読者のプロフィールに属性を追加する

購読者のプロフィールに属性を追加し、後でそれらの属性に基づいてセグメント分けを行うことができます。たとえば、特定の種類のニュース（例: 政治、スポーツ）に興味がある訪問者にタグを付け、それらを特定の通知の対象にしたい場合があります。

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

```kotlin
PushSDK.UserProfile.set(key="interests", value=listOf("politics", "news"))
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.UserProfile.set("interests", List.of("politics", "news"));
```

{% endtab %}
{% endtabs %}

一度に複数の属性を設定したい場合は、値のマップを送信することもできます。以下の例では、両方を設定します `is_paying_subscriber` および `interests` 購読者の属性。

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

```kotlin
PushSDK.UserProfile.set(data=hashMapOf(
  "is_paying_subscriber" to true,
  "interests" to listOf("politics", "news")
))
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.UserProfile.set(Map.of(
  "is_paying_subscriber", true,
  "interests", List.of("politics", "news")
));
```

{% endtab %}
{% endtabs %}

プロパティの値を配列として保存している場合は、 `append` および `remove` メソッドを使って値を追加または削除します:

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

```swift
// 購読者の既存の興味に 'sports' を追加
PushSDK.UserProfile.append(key = "interests", values = listOf("sports"))

// 購読者の興味から 'fashion' と 'news' を削除
PushSDK.UserProfile.remove(key = "interests", values = listOf("fashion", "news"))
```

{% endtab %}

{% tab title="Java" %}

```java
// 購読者の既存の興味に 'sports' を追加
PushSDK.UserProfile.append("interests", List.of("sports"));

// 購読者の興味から 'fashion' と 'news' を削除
PushSDK.UserProfile.remove("interests", List.of("fashion", "news"));
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
次のプロパティは `append` および `remove` メソッドを使用すると、指定された最新の20件の値のみが保存されます。
{% endhint %}

## アクティビティの追跡（URL / 画面の訪問）

アプリケーション内での購読者の流れを追跡するには、アクティビティ追跡を使用できます。画面またはURL経由で追跡でき、必要に応じて関連するメタデータ/タグを渡せます。

この情報は、セグメンテーションで使用して、訪問回数や直近性に基づくタグ付きの特定のURLや画面を訪れた購読者のコホートを作成するために利用できます。例えば: 「過去30日間に少なくとも4回、"Astrology" とタグ付けされたページ/画面を訪れた購読者」.

{% tabs %}
{% tab title="Kotlin" %}
キーワード/タグのメタデータとともに、訪問したURLまたは画面を追跡するには:

```kotlin
PushSDK.UserProfile.trackActivity(name="myapp://dashboard", tags=listOf("my-tag"))
```

また、提供するタグがない場合は `tags` パラメータを省略します:

```kotlin
PushSDK.UserProfile.trackActivity(name="https://www.pushly.com/article-1")
```

{% endtab %}

{% tab title="Java" %}
キーワード/タグのメタデータとともに、訪問したURLまたは画面を追跡するには:

```java
PushSDK.UserProfile.trackActivity("myapp://dashboard", List.of("my-tag"));
```

また、提供するタグがない場合は `2回目` パラメータを省略します:

```java
PushSDK.UserProfile.trackActivity("https://pushly.com/article-1");
```

{% endtab %}
{% endtabs %}

## 匿名の Push ID を取得する

PushSDK は、イベント追跡とデバッグの目的で匿名の Push ID を自動的に割り当てます。

Push ID を返すには、以下のコードを実行してください:

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

```kotlin
val pushId = PushSDK.UserProfile.anonymousId
```

{% endtab %}

{% tab title="Java" %}

```java
String pushId = PushSDK.UserProfile.getAnonymousId();
```

{% endtab %}
{% endtabs %}

## 購読者の外部IDを設定する

購読者に一意のユーザーIDを提供すると、後で API を通じてその購読者とやり取りできるようになります。

購読者の外部IDが設定されたら、当社チームと連携して双方向の自動データ同期を構築できます。以下のユースケースは、パブリッシャーがサーバー間リクエストを通じて外部IDを使用する一般的な方法です。

* 個々の購読者にプログラムで通知を送信する
* 購読解除リクエストを処理する
* 購読者のプロフィール属性とイベントを追加および削除する

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

```kotlin
PushSDK.UserProfile.externalId = "external-id"
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.UserProfile.setExternalId("external-id");
```

{% endtab %}
{% endtabs %}

購読者にすでに External ID がタグ付けされているかどうかも確認できます:

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

```kotlin
val currentExternalId = PushSDK.UserProfile.externalId
```

{% endtab %}

{% tab title="Java" %}

```java
String currentExternalId = PushSDK.UserProfile.getExternalId();
```

{% endtab %}
{% endtabs %}

## 訪問者がすでに購読済みかどうかを判定する

ユーザーがすでに通知の購読者であるかどうかを知る必要がある場合は、次のスニペットを使用できます:

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

```kotlin
val subscribed = PushSDK.PushNotifications.isSubscribed
```

{% endtab %}

{% tab title="Java" %}

```java
Boolean subscribed = PushSDK.PushNotifications.isSubscribed();
```

{% endtab %}
{% endtabs %}

## 訪問者がプロンプト表示の対象かどうかを判定する

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

```kotlin
val isEligible = PushSDK.PushNotifications.isEligibleToPrompt
```

{% endtab %}

{% tab title="Java" %}

```java
Boolean isEligible = PushSDK.PushNotifications.isEligibleToPrompt();
```

{% endtab %}
{% endtabs %}

## ユーザー通知の一時停止 / 再開（ソフト購読解除）

次のメソッドを呼び出すことで、ユーザーの通知を一時停止できます:

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

```kotlin
PushSDK.PushNotifications.pause()
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.PushNotifications.pause();
```

{% endtab %}
{% endtabs %}

ユーザーの通知を再開する場合は、次のメソッドを呼び出します:

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

```kotlin
PushSDK.PushNotifications.resume()
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.PushNotifications.resume();
```

{% endtab %}
{% endtabs %}

ユーザーの通知が現在一時停止されているかを確認するには:

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

```kotlin
val isPaused = PushSDK.PushNotifications.isPaused
```

{% endtab %}

{% tab title="Java" %}

```java
Boolean isPaused = PushSDK.PushNotifications.isPaused();
```

{% endtab %}
{% endtabs %}

## ユーザーを完全に削除する

ユーザーをすべての通知と追跡の対象から除外する必要がある場合は、次のメソッドを実行してください:

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

```kotlin
PushSDK.UserProfile.requestUserDeletion()
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.UserProfile.requestUserDeletion();
```

{% endtab %}
{% endtabs %}

## SDK のログレベルを設定する

PushSDK のログレベルは `なし` がデフォルトに設定されています。サポートされるログレベルは次のとおりです: `詳細`, `デバッグ`, `情報`, `警告`, `エラー`, `重大`、および `なし`.

より詳細なログを有効にするには、アプリケーションのメインに次のコードを追加してください `onCreate` メソッド:

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

```kotlin
PushSDK.logLevel = PNLogLevel.INFO
```

{% endtab %}

{% tab title="Java" %}

```java
PushSDK.setLogLevel(PNLogLevel.INFO);
```

{% endtab %}
{% endtabs %}
