# Huawei Push Kit

<partial id="shared/_dashboard-huawei-config"></partial>

## Receiving Notifications in the Client

Start by [adding Huawei to your Android project](https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-get-started-android-0000001058210705). You only need to set up the Huawei Push Kit dependencies and add a _agconnect-services.json_ file to your project source directory.

Stream Chat's Android SDK ships an artifact that allows quick integration of Huawei Push Kit messages. Add the following dependency to your app's `build.gradle` file:

```groovy
repositories {
    maven { url 'https://developer.huawei.com/repo/' }
}

dependencies {
    implementation "io.getstream:stream-android-push-huawei:$stream_version"
}
```

Then, add a `HuaweiPushDeviceGenerator` to your `NotificationConfig`, and pass that into `ChatClient.Builder` when initializing the SDK:

<tabs>

<tabs-item value="kotlin" label="Kotlin">

```kotlin {3-6,10}
val notificationConfig = NotificationConfig(
    pushDeviceGenerators = listOf(
        HuaweiPushDeviceGenerator(
            context = context,
            appId = "YOUR HUAWEI APP ID",
            providerName = "provierName",
        )
    )
)
ChatClient.Builder("apiKey", context)
    .notifications(notificationConfig)
    .build()
```

</tabs-item>

<tabs-item value="java" label="Java">

```java
boolean pushNotificationEnabled = true;
List<PushDeviceGenerator> pushDeviceGeneratorList = Collections.singletonList(
    new HuaweiPushDeviceGenerator(
        context,
        "YOUR HUAWEI APP ID",
        "provierName"
    )
);
NotificationConfig notificationConfig = new NotificationConfig(true, pushDeviceGeneratorList);
new ChatClient.Builder("apiKey", context)
        .notifications(notificationConfig)
        .build();
```

</tabs-item>

</tabs>

<admonition type="warning">

_ChatClient_ must be initialized before handling push notifications. We recommend setting it up in your `Application` class.

</admonition>

That's all you have to do to integrate the Huawei push provider artifact.

### Using a Custom Huawei Messaging Service

The Stream Huawei push provider artifact contains a `HuaweiMessagingService` implementation that sends new Huawei tokens to Stream and forwards incoming push messages to `ChatClient` to handle.

If you're using Huawei notifications for other purposes inside your app as well, you will need your own custom service to replace this. Here, you have to call `HuaweiMessagingDelegate`'s `registerHuaweiToken` and `handleRemoteMessage` methods, like so:

<tabs>

<tabs-item value="kotlin" label="Kotlin">

```kotlin {6,14}
class CustomHuaweiMessagingService : HmsMessageService() {

    override fun onNewToken(token: String) {
        // Update device's token on Stream backend
        try {
            HuaweiMessagingDelegate.registerHuaweiToken(token, "providerName")
        } catch (exception: IllegalStateException) {
            // ChatClient was not initialized
        }
    }

    override fun onMessageReceived(message: com.huawei.hms.push.RemoteMessage) {
        try {
            if (HuaweiMessagingDelegate.handleRemoteMessage(message)) {
                // RemoteMessage was from Stream and it is already processed
            } else {
                // RemoteMessage wasn't sent from Stream and it needs to be handled by you
            }
        } catch (exception: IllegalStateException) {
            // ChatClient was not initialized
        }
    }
}
```

</tabs-item>

<tabs-item value="java" label="Java">

```java
public final class CustomHuaweiMessagingService extends HmsMessageService {
    @Override
    public void onNewToken(String token) {
        // Update device's token on Stream backend
        try {
            HuaweiMessagingDelegate.registerHuaweiToken(token, "providerName");
        } catch (IllegalStateException exception){
            // ChatClient was not initialized
        }
    }

    @Override
    public void onMessageReceived(com.huawei.hms.push.RemoteMessage remoteMessage) {
        try {
            if (HuaweiMessagingDelegate.handleRemoteMessage(remoteMessage)) {
                // RemoteMessage was from Stream and it is already processed
            } else {
                // RemoteMessage wasn't sent from Stream and it needs to be handled by you
            }
        } catch (IllegalStateException exception){
            // ChatClient was not initialized
        }
    }
}
```

</tabs-item>

</tabs>

<admonition type="note">

Your custom service needs to have an [`<intent-filter>` priority](https://developer.android.com/guide/topics/manifest/intent-filter-element#priority) higher than `-1` to replace our default service. (This priority is `0` by default.)

</admonition>

### Push Notification Payload

<partial id="shared/_push-notification-payload"></partial>

---

This page was last updated at 2025-08-15T14:15:40.545Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/sdk/android/client/guides/push-notifications/push-providers/huawei/](https://getstream.io/chat/docs/sdk/android/client/guides/push-notifications/push-providers/huawei/).