# セルフマネージド統合

統合をより簡単にするため、PushSDK には自動的に次の拡張が含まれています `FirebaseMessagingService` クラス。ただし、独自のサービスを持っていて、以下を含むいくつかのシナリオで PushSDK に呼び出しを転送する必要がある場合があります:

* 他の SDK との競合
* 競合するサードパーティ製開発ソリューション
* 当社のメッセージングサービスが、既存のアーキテクチャと競合している

{% hint style="info" %}
FirebaseMessaging との統合をカスタマイズする必要がある場合にのみ、セルフ管理型の統合を検討することをお勧めします。セルフ管理型の統合を使用する場合は、PushSDK の新しいリリースで、手動で呼び出す必要のある追加のメソッドが増えないようにする必要があります。
{% endhint %}

### 独自のメッセージングサービスを統合する

まず、PushSDK によって自動的に追加されるサービスを削除し、アプリのマニフェストファイルに独自のサービスを追加します。

{% tabs %}
{% tab title="AndroidManifest.xml" %}

```xml
<manifest 
    ...
    xmlns:tools="http://schemas.android.com/tools"
>
    <!-- PushSDK のメッセージングサービスを削除 -->
    <service
        android:name="com.pushly.android.PNMessagingService"
        tools:node="remove" />

    <!-- 独自のメッセージングサービスを追加 -->
    <service
        android:name=".MyMessageService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
</manifest>
```

{% endtab %}
{% endtabs %}

独自のメッセージングサービスを追加した後は、これまで自動的に処理されていたメソッドを呼び出すために、PushSDK への呼び出しを追加する必要もあります。以下のすべてのメソッドを実装しない場合、PushSDK が正しく機能しない可能性があります。

手動で呼び出す必要があるメソッドは次のとおりです:

* `PushSDK.handleOnNewToken(token: String)`
* `PushSDK.handleOnMessageReceived(message: RemoteMessage)`

### メッセージングサービスの例

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

<pre class="language-kotlin"><code class="lang-kotlin"><strong>override fun onNewToken(token: String) {
</strong><strong>    super.onNewToken(token)
</strong>    PushSDK.handleOnNewToken(token)
}

override fun onMessageReceived(message: RemoteMessage) {
    super.onMessageReceived(message)
    PushSDK.handleOnMessageReceived(message)
}
</code></pre>

{% endtab %}

{% tab title="Java" %}

```java
@Override
public void onNewToken(@NonNull String token) {
    super.onNewToken(token);
    PushSDK.handleOnNewToken(token);
}

@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
    super.onMessageReceived(message);
    PushSDK.handleOnMessageReceived(message);
}
```

{% endtab %}
{% endtabs %}
