# プッシュ

## プッシュ <a href="#undefined" id="undefined"></a>

Game Chatでプッシュ通知は、ユーザーに重要な情報やアップデートをリアルタイムで通知する重要な機能です。このプッシュ通知サービスにより、ユーザーはアプリがバックグラウンドにあるときやデバイスが無効ステータスのときでも、重要なメッセージを見逃すことはありません。以下は Game Chatのプッシュ通知機能の詳細な説明です。

## プッシュ通知の主な機能 <a href="#undefined" id="undefined"></a>

1. **リアルタイム通知** : 新しいメッセージ、メンバー変更、イベント招待などのチャット関連の通知をユーザーに即座に送信します。
2. **カスタマイズ可能** : 通知の形式と内容をアプリケーションの要件に合わせてカスタマイズできます。
3. **マルチプラットフォーム対応** : iOS、Androidなど様々なモバイル OSにプッシュ通知をサポートし、ユーザー基盤を広げることができます。
4. **バッテリーとデータ効率** : 最新のプッシュ技術を使用して、バッテリー消費とデータ使用を最小限に抑えながら、効率的に通知を配信します。
5. **会話型通知** : ユーザーが通知自体で直接対応できるように会話型要素を含めることができます。例えば、メッセージに直接返信したり、招待に応じたりできます。

## プッシュ通知の実装方法 <a href="#undefined" id="undefined"></a>

プッシュ通知サービスを実装するために、Game Chat APIはいくつかの核心要素を提供します:

* **プッシュトークン登録** : ユーザーデバイスのプッシュトークンを Game Chatサーバに登録し、そのデバイスに通知を送信できるようにします。
* **通知設定管理** : ユーザーは自分の通知の好みに応じて、通知の受信有無を設定できます。
* **バックエンド統合** : サーバ側では Game Chatのバックエンドと統合して、リアルタイムでプッシュ通知を作成・送信できます。

## セキュリティと個人情報保護 <a href="#undefined" id="undefined"></a>

* **データ暗号化** : すべてのプッシュ通知は送信中に暗号化され、外部からのアクセスから保護されます。
* **個人情報保護方針の遵守** : Game Chatはユーザーの個人情報保護を非常に重要視し、関連する法律および規制を遵守して通知サービスを提供します。

プッシュ通知機能により Game Chatはユーザーエンゲージメントを促進し、アプリの使用率を高めてユーザーエクスペリエンスを向上させることに大きく貢献します。ユーザーは重要なコミュニケーションを見逃すことなく、いつでもどこでもつながることができます。

## Android(Kotlin)

[Firebase Console](https://console.firebase.google.com/)で Androidアプリを追加した後、ダウンロードした「google-services.json」ファイルをプロジェクトアプリモジュールのルートフォルダに追加します。

ファイルの追加後に bundle.gradle.kts内に以下の内容を追加します。

```none
plugins {
...
    id("com.google.gms.google-services")
...
}
dependencies {
...
    implementation("com.google.firebase:firebase-messaging-ktx:23.2.1")
...
}
```

プッシュ許可権限のポップアップをリクエストします。

```kotlin
import com.nbase.sdk.Permission

NChat.setEnablePush(true)
NChat.requestPermission(this, Permission.NOTIFICATION)
// initialize前に呼び出す必要があります。
```

Connect後にプッシュ受信有無を設定するため、setPushStateを呼び出します。

```kotlin
NChat.setPushState(PushState([PUSH], [AD], [NIGHT])) { state, e ->
    if (e != null) {
        // エラー
    } else {
        // 成功
    }
}
```

| ID    | Type    | Description            |
| ----- | ------- | ---------------------- |
| push  | boolean | プッシュ受信 On/Off(true=On) |
| ad    | boolean | プッシュ受信のため、必ず trueで呼び出す |
| night | boolean | 夜間プッシュ受信 On/Off        |

## **iOS(Swift)**

アプリのプッシュ送信権限を追加します。Targetの Signing & Capabilitiesで、左上の+ Capability > Push Notificationsを選択して追加します。

<figure><img src="/files/4pRImUX2xSaE1P01RVa4" alt=""><figcaption></figcaption></figure>

AppDelegate.swift作成

```swift
import UIKit
import NChat

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // プッシュ通知権限のリクエスト
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
            print("Permission granted: \(granted)")
        }

        UNUserNotificationCenter.current().delegate = self
        application.registerForRemoteNotifications()

        return true
    }

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        // APNsトークンを文字列に変換
        let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
        let token = tokenParts.joined()

        // sandbox環境でプッシュを受信するには sandbox: true
        NChat.setPushToken(token: token, sandbox: false)
    }
}
```

Connect後にプッシュ受信有無を設定するため、setPushStateを呼び出します。

```swift
NChat.setPushState(push: true, ad: true, night: true) { result in
    switch(result)
    {
    case .success(let status) :
        // 成功
        break;
    case .failure(let error) :
        // 失敗
        break;
    }
}
```

| ID    | Type    | Description            |
| ----- | ------- | ---------------------- |
| push  | boolean | プッシュ受信 On/Off(true=On) |
| ad    | boolean | プッシュ受信のため、必ず trueで呼び出す |
| night | boolean | 夜間プッシュ受信 On/Off        |


---

# Agent Instructions: 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:

```
GET https://docs.gamechat.me/basics/game-chat-v3/game-chat-ri-ben-yu/v3nowo/pusshu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
