Skip to content

离线推送

App 客户端不在线时,如果接收到新消息,在以下情况下,离线消息会触发金山协作中台服务端的推送服务。金山协作中台服务端会通过推送通道下发一条提醒到客户端 SDK。该提醒一般以通知形式展示在通知面板,提示用户有离线消息。

在以下情况下,不会触发推送服务。

  • 客户端调用了KIM.getControl().logout()方法,彻底注销在金山协作中台服务端的登录信息。

启用推送

必要条件

  • 已集成金山协作中台 SDK。并初始化push SDK. 由于应用市场对于隐私协议的限制,该初始化方法可根据应用市场规定,放置在相应的初始化位置(比如:隐私协议弹窗之后)
kotlin
public class SampleApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ...
        //注意此方法必须实现,否则会丢失离线通知消息。由于应用市场对于隐私协议的限制,该初始化方法可根据应用市场规定,放置在相应的初始化位置(比如:隐私协议弹窗之后),此处仅为调用示例。
        KIM.getControl().initPushSdk(this);
    }
}

客户端权限配置

由于 协作中台 SDK 默认推送通道属于应用级别的推送,会受系统各种权限限制,建议提示用户打开对应权限,以提高推送到达率。

推送证书配置

您需要将自己的应用注册到各个厂商的推送平台,得到 AppID 和 AppKey 等参数,并配置到企业管理后台

集成第三方推送

协作中台 支持第三方推送通道。第三方推送通道指各手机厂商从系统层维护的长连接通道,你可以与 协作中台 提供的推送服务结合使用。目前 协作中台 已适配了小米、华为、荣耀、OPPO、vivo、个推等推送服务。

集成小米推送

在主工程的 AndroidManifest.xml 中增加如下配置:

Xml
<meta-data
    android:name="MIPUSH_APPID"
    android:value="\${MIPUSH_APPID}" />
<meta-data
    android:name="MIPUSH_APPKEY"
    android:value="\${MIPUSH_APPKEY}" />

在主工程的 build.gradle 中增加如下配置:

Groovy
android {
    ...

    defaultConfig {
        ...

        manifestPlaceholders = [
                MIPUSH_APPID: "从小米官方申请到的具体的APP ID", //小米推送AppId
                MIPUSH_APPKEY: "从小米官方申请到的具体的APP KEY", //小米推送AppKey
        ]
    }
}

配置混淆文件:

Plaintext
# 小米推送
-keep class com.wps.woa.sdk.push.manufactory.xiaomi.XiaomiMessageReceiver {*;}
#可以防止一个误报的 warning 导致无法成功编译,如果编译使用的 Android 版本是 23。
-dontwarn com.xiaomi.push.**

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushXiaomi:{version}'
}

集成华为推送

项目根目录下的 build.gradle 中,添加

Groovy
buildscript {
    ...
    dependencies {
        ...
        classpath 'com.huawei.agconnect:agcp:1.6.0.300'
    }
}

allprojects {
    ...
    repositories {
        //Huawei官方maven仓库
        maven { url 'https://developer.huawei.com/repo/' }
    }
}

app工程目录下的 build.gradle 中,添加

Groovy
apply plugin: 'com.huawei.agconnect'

将从华为官方后台申请到的 agconnect-services.json 放入项目根目录下

配置混淆文件:

Plaintext
# 华为推送
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushHuawei:{version}'
}

集成荣耀推送

在主工程的 AndroidManifest.xml 中增加如下配置:

Xml
<meta-data
    android:name="com.hihonor.push.app_id"
    android:value="${HONOR_APPKEY}" />

项目根目录下的 build.gradle 中,添加

Groovy
//荣耀官方maven仓库,荣耀离线推送
maven { url 'https://developer.hihonor.com/repo/' }

在主工程的 build.gradle 中增加如下配置:

Groovy
android {
    ...

    defaultConfig {
        ...

        manifestPlaceholders = [
                HONOR_APPKEY: "从荣耀官方申请到的具体的APP KEY", // 荣耀推送AppKey
        ]
    }
}

配置混淆文件:

Plaintext
# 荣耀推送
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushHonor:{version}'
}

集成魅族推送

在主工程的 AndroidManifest.xml 中增加如下配置:

Xml
<meta-data
    android:name="MEIZU_APPID"
    android:value="${MEIZU_APPID}" />
<meta-data
    android:name="MEIZU_APPKEY"
    android:value="${MEIZU_APPKEY}" />

在主工程的 build.gradle 中增加如下配置:

Groovy
android {
    ...

    defaultConfig {
        ...

        manifestPlaceholders = [
                MEIZU_APPKEY: "从魅族官方申请到的具体的APP KEY", // 魅族推送AppKey
                MEIZU_APPID : "从魅族官方申请到的具体的APP ID", // 魅族推送AppId
        ]
    }
}

混淆配置文件:

Plaintext
-dontwarn com.meizu.cloud.**
-keep class com.meizu.cloud.** { *; }

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushMeizu:{version}'
}

集成 OPPO 推送

在主工程的 AndroidManifest.xml 中增加如下配置:

Xml
<meta-data
    android:name="OPPO_APP_KEY"
    android:value="${OPPO_APP_KEY}" />
<meta-data
    android:name="OPPO_APP_SECRET"
    android:value="${OPPO_APP_SECRET}" />

在主工程的 build.gradle 中增加如下配置:

Groovy
android {
    ...

    defaultConfig {
        ...

        manifestPlaceholders = [
                OPPO_APP_SECRET : "从OPPO官方申请到的具体的 APP_SECRET", //OPPO APP SECRECT
                OPPO_APP_KEY: "从OPPO官方申请到的具体的 APP_KEY",     //OPPO APP KEY
        ]
    }
}

配置混淆文件:

Plaintext
# OPPO推送
-keep public class * extends android.app.Service
-keep class com.heytap.msp.** {*;}

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushOppo:{version}'
}

集成 VIVO 推送

在主工程的 AndroidManifest.xml 中增加如下配置:

Xml
<meta-data
    android:name="com.vivo.push.app_id"
    android:value="\${VIVO_APP_ID}" />
<meta-data
    android:name="com.vivo.push.api_key"
    android:value="${VIVO_APP_KEY}" />

在主工程的 build.gradle 中增加如下配置:

Groovy
android {
    ...

    defaultConfig {
        ...

        manifestPlaceholders = [
                VIVO_APP_ID : "从VIVO官方申请到的具体的 APP_ID", //VIVO APP ID
                VIVO_APP_KEY: "从VIVO官方申请到的具体的 APP_KEY", //VIVO APP KEY
        ]
    }
}

配置混淆文件:

Plaintext
# VIVO推送
-dontwarn com.vivo.push.**
-keep class com.vivo.push.**{*;}
-keep class com.vivo.vms.**{*;}
-keep class com.wps.woa.sdk.push.manufactory.vivo.VivoMessageReceiver {*;}

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushVivo:{version}'
}

集成个推

在主工程的 AndroidManifest.xml 中增加如下配置:

Xml
<meta-data
    android:name="GETUI_APPID"
    android:value="${GETUI_APPID}" />

在主工程的 build.gradle 中增加如下配置:

Groovy
android {
    ...

    defaultConfig {
        ...

        manifestPlaceholders = [
                GETUI_APPID : "从个推官方申请到的具体的 APP ID", // 个推AppId
        ]
    }
}

添加依赖:

Groovy
dependencies {
    // {version}为实际的组件版本号,请查看demo配置的版本
    api 'com.wps.woa.sdk:pushGetui:{version}'
}

自行集成推送SDK

如果使用业务方自己的厂商sdk,则需要将注册成功的token,通过以下方式设置到协作中台SDK:

  • 需要调用 KIM.getControl().setPushToken(pushType, token)

参数说明

参数类型说明
pushTypeStringhuawei 华为
honor 荣耀
meizu 魅族
oppo OPPO
vivo ViVO
xiaomi 小米
tokenString各厂商注册成功的token

消息通知设置

离线推送设置

获取云端配置

获取当前设备在云端的消息通知设置

接口定义
kotlin
KIM.settings().getNotificationSettings(callback: KIMOperateCallback<KIMNotificationSettings>)
参数说明
参数类型说明
callbackKIMOperateCallback<KIMNotificationSettings>回调

KIMNotificationSettings

参数类型说明
showNewMessageBoolean?是否开启消息推送
showMeetingMessageBoolean?是否开启会议消息推送
showNotificationDetailBoolean?是否开启消息详情推送
muteWhenDesktopOnlineBoolean?是否开启pc在线不推送
代码示例
kotlin
KIM.settings().getNotificationSettings(object :
            KIMOperateCallback<KIMNotificationSettings> {
            override fun onSuccess(value: KIMNotificationSettings?) {
                //获取各类开关值
            }

            override fun onError(error: ErrorCode) {
                log.e(error.msg)
            }

        })

消息推送开关

打开后,用户可在App离线时接收到消息推送(除会议和语音通话消息外)

接口定义
kotlin
KIM.settings().setNewMessageNotificationEnabled(enable: Boolean,
        callback: KIMOperateCallback<Boolean>?)
参数说明
参数类型说明
enableBoolean是否开启
callbackKIMOperateCallback<Boolean>?回调
代码示例
kotlin
KIM.settings().setNewMessageNotificationEnabled(
            true,
            object : KIMOperateCallback<Boolean> {
                override fun onSuccess(value: Boolean?) {
                    //
                }

                override fun onError(error: ErrorCode) {
                    log.e(error.msg)
                }
            })

会议消息推送开关

打开后,用户可在App离线时接收到 会议和语音通话 消息推送

接口定义
kotlin
KIM.settings().setMeetingMessageNotificationEnabled(enable: Boolean,
        callback: KIMOperateCallback<Boolean>?)
参数说明
参数类型说明
enableBoolean是否开启
callbackKIMOperateCallback<Boolean>?回调
代码示例
kotlin
KIM.settings().setMeetingMessageNotificationEnabled(
            true,
            object : KIMOperateCallback<Boolean> {
                override fun onSuccess(value: Boolean?) {
                    //
                }

                override fun onError(error: ErrorCode) {
                    log.e(error.msg)
                }
            })

PC在线时,移动端不接收推送开关

打开后,当用户pc端在线时,本设备将不接收新消息通知

接口定义
kotlin
KIM.settings().setMutePhoneWhenDesktopOnLine(enable: Boolean,
        callback: KIMOperateCallback<Boolean>?)
参数说明
参数类型说明
enableBoolean是否开启
callbackKIMOperateCallback<Boolean>?回调
代码示例
kotlin
KIM.settings().setMutePhoneWhenDesktopOnLine(
            true,
            object : KIMOperateCallback<Boolean> {
                override fun onSuccess(value: Boolean?) {
                    //
                }

                override fun onError(error: ErrorCode) {
                    log.e(error.msg)
                }
            })

消息详情推送开关

打开后,用户接收到的离线推送通知的内容将显示为“你收到了1条消息”

接口定义
kotlin
KIM.settings().setShowNotificationDetailEnabled(enable: Boolean,
        callback: KIMOperateCallback<Boolean>?)
参数说明
参数类型说明
enableBoolean是否开启
callbackKIMOperateCallback<Boolean>?回调
代码示例
kotlin
KIM.settings().setShowNotificationDetailEnabled(
            true,
            object : KIMOperateCallback<Boolean> {
                override fun onSuccess(value: Boolean?) {
                    //
                }

                override fun onError(error: ErrorCode) {
                    log.e(error.msg)
                }
            })

通知栏点击事件处理

注册通知点击事件。

接口定义
kotlin
KIM.getControl().setOnNotificationClickedListener(listener: (Intent) -> Boolean)
参数说明
参数类型说明
listener(Intent) -> Boolean监听器
代码示例
kotlin
KIM.getControl().setOnNotificationClickedListener { intent: Intent? ->
    if (intent == null) return@setOnNotificationClickedListener false
    val mainIntent = Intent(this@SampleApp, MainActivity::class.java)
    mainIntent.setData(intent.data)
    mainIntent.putExtras(intent)
    mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(mainIntent)
    true
}