repositories {
maven { url 'https://developer.huawei.com/repo/' }
}
dependencies {
implementation "io.getstream:stream-android-push-huawei:$stream_version"
}
Huawei Push Kit
This is the guide for using Huawei Push Kit to receive notifications from Stream Chat.
Configuring Notifications on the Stream Dashboard
To be able to receive notifications from Stream, you need to provide your Huawei credentials to Stream.
Go to the Huawei Console, and select the project your app belongs to.
If you don’t have a Huawei project yet, you’ll have to create a new one.
Click on Project settings and navigate to the General information tab. Under App Information, locate the App ID and App secret, and copy them:
Open the Stream Dashboard. Navigate to the Chat Overview page for your app.
Scroll down and enable the Huawei switch. Paste your App ID and App secret, and click Save to confirm your changes.
With that, you’re done setting up on the dashboard. Next, you need to add the client-side integration.
Receiving Notifications in the Client
Start by adding Huawei to your Android project. You only need to set up the Huawei Push Kit dependencies and add a agconnect-services.json file to your project source directory.
Stream Video for Android ships an artifact that allows quick integration of Huawei Push Kit messages. Add the following dependency to your app’s build.gradle
file:
Then, add a HuaweiPushDeviceGenerator
to your NotificationConfig
, and pass that into StreamVideoBuilder
when initializing the SDK:
val notificationConfig = NotificationConfig(
pushDeviceGenerators = listOf(
HuaweiPushDeviceGenerator(
context = context,
appId = "YOUR HUAWEI APP ID",
providerName = "huawei",
)
)
)
StreamVideoBuilder(
context = context,
user = user,
token = token,
apiKey = apiKey,
notificationConfig = notificationConfig,
).build()
List<PushDeviceGenerator> pushDeviceGeneratorList = Collections.singletonList(new HuaweiPushDeviceGenerator(context, "YOUR HUAWEI APP ID", "huawei"));
NotificationConfig notificationConfig = new NotificationConfig(pushDeviceGeneratorList);
new StreamVideoBuilder(
context,
user,
token,
apiKey,
notificationConfig,
).build();
Make sure that StreamVideo is always initialized before handling push notifications. We highly recommend initializing it in the Application
class.
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 StreamVideo
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:
class CustomHuaweiMessagingService : HmsMessageService() {
override fun onNewToken(token: String) {
// Update device's token on Stream backend
try {
HuaweiMessagingDelegate.registerHuaweiToken(token, "huawei")
} catch (exception: IllegalStateException) {
// StreamVideo 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) {
// StreamVideo was not initialized
}
}
}
public final class CustomHuaweiMessagingService extends HmsMessageService {
@Override
public void onNewToken(String token) {
// Update device's token on Stream backend
try {
HuaweiMessagingDelegate.registerHuaweiToken(token, "huawei");
} catch (IllegalStateException exception){
// StreamVideo 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){
// StreamVideo was not initialized
}
}
}
Your custom service needs to have an <intent-filter>
priority higher than -1
to replace our default service. (This priority is 0
by default.)
Push Notification Payload
Push notifications are delivered as data payloads that the SDK can use to convert into the same data types that are received when working with the APIs.
When a call is started, Stream Server kicks a job that sends a regular data message (as below) to configured push providers on your app. When a device receives the payload, it’s passed to the SDK which connects to Stream Video Server to process the the call and show the notification to the final user.
This is the main payload which will be sent to each configured provider:
{
"sender": "stream.video",
"type": "call.ring | call.notification | call.live_started",
"call_display_name": "Jc Miñarro",
"call_cid": "default:77501ea4-0bd7-47d1-917a-e8dc7387b87f",
"version": "v2",
}