1.1.0
该门户网站正在开发中。文档的完整版本请看这里.
- Kotlin
- Java
为了推送通知的运行,必须遵守以下条件:
- 用户的设备上必须安装 RuStore 应用程序。
- RuStore 应用程序必须支持推送通知的功能。
- RuStore 应用程序应允许在后台模式下运行。
- 用户必须在 RuStore 应用程序中获得授权。
- 应用程序的签名指纹必须与开发者控制台中添加的指纹匹配。
添加存储库
连接本地存储库:
repositories { \`\`maven { \`\`url = uri( \"https://artifactory-external.vkpartner.ru/artifactory/maven\" ) \`\`}}
集成依赖项
在您的配置文件中添加以下代码以连接依赖项:
dependencies { \`\`implementation( \"ru.rustore.sdk:pushclient:1.2.0\" )}\<br\>
编辑您的应用程序的清单
声明扩展 RuStoreMessagingService 的服务:
\< service \`\`android:name = \".MyRuStoreMessagingService\" \`\`android:exported = \"true\" \`\`tools:ignore = \"ExportedService\" \> \`\`\< intent-filter \> \`\`\< action android:name = \"ru.rustore.sdk.pushclient.MESSAGING_EVENT\" /\> \`\`\</ intent-filter \>\</ service \>
果您想更改标准通知的图标或颜色,可以添加以下元数据:
\`\<\` \`meta-data\`\<br\>\` android:name="ru.rustore.sdk.pushclient.default_notification_icon"\<br\> android:resource\` \`=\` \`\"@drawable/ic_baseline_android_24\"\` \`/\>\`\<br\>\`\<\` \`meta-data\`\<br\>\` android:name="ru.rustore.sdk.pushclient.default_notification_color"\<br\> \`android:resource = \"@color/your_favorite_color\" /\> \<br\>
可以添加以下元数据以重写通知渠道:
\< meta-data \`\`android:name = \"ru.rustore.sdk.pushclient.default_notification_channel_id\" \`\`android:value = \"@string/pushes_notification_channel_id\" /\>
加推送通知渠道时,您必须自行创建该渠道。
初始化
要进行初始化,需要在RuStore 控制台系统中获得项目 ID。 为此,请转到应用程序页面的"推送通知"部分,然后选择"项目"。
要进行初始化,请在项目的 Application 中添加以下代码:
classApp: Application() { \`\`override fun onCreate() { \`\`super .onCreate() \`\`RuStorePushClient.init( \`\`application = this , \`\`projectId = \"i5UTx96jw6c1C9LvdlE4cdNrWHMNyRBt\" , \`\`logger = DefaultLogger() \`\`) \`\`}}
application
- Application 类的实例;projectId
- 您在 VKPNS 系统中项目的标识符;logger
- 日志器,默认使用 logcat 输出。
事件日志记录
如果要记录推送通知库事件,请在 RuStorePushClient.init 调用中添加 logger 参数(初始化时该参数为可选参数)。
为此,您需要实现 Logger 接口:
接口Logger
interface Logger { \`\`fun verbose(message: String, throwable: Throwable? = null ) \`\`fun debug(message: String, throwable: Throwable? = null ) \`\`fun info(message: String, throwable: Throwable? = null ) \`\`fun warn(message: String, throwable: Throwable? = null ) \`\`fun error(message: String, throwable: Throwable? = null ) \`\`fun createLogger(tag: String): Logger}
果 Logger 没有被传递,将使用默认的实现,它使用 AndroidLog。
日志器实现示例
public class DefaultLogger( \`\`private val tag: String? = null ,) : Logger { \`\`override fun verbose(message: String, throwable: Throwable?) { \`\`Log.v(tag, message, throwable) \`\`} \`\`override fun debug(message: String, throwable: Throwable?) { \`\`Log.d(tag, message, throwable) \`\`} \`\`override fun info(message: String, throwable: Throwable?) { \`\`Log.i(tag, message, throwable) \`\`} \`\`override fun warn(message: String, throwable: Throwable?) { \`\`Log.w(tag, message, throwable) \`\`} \`\`override fun error(message: String, throwable: Throwable?) { \`\`Log.e(tag, message, throwable) \`\`} \`\`override fun createLogger(tag: String): Logger { \`\`val newTag = if ( this .tag != null ) { \`\`\"\${this.tag}:\$tag\" \`\`} else { \`\`tag \`\`} \`\`return DefaultLogger(newTag) \`\`}}
检查获得推送通知的可能性
关键词:RuStore,开发者,文档,RuStoreSDK,推送通知,检查获得推送通知。为了推送通知的运行,必须遵守几个条件:
- 用户的设备上必须安装 RuStore。
- RuStore 必须支持推送通知功能。
- RuStore 应用程序应允许在后台模式下运行。
- 用户必须在 RuStore 中获得授权。
了检查设备上是否安装了 RuStore,可以使用 RuStorePushClient.checkPushAvailability 方法:
RuStorePushClient.checkPushAvailability() \`\`.addOnCompleteListener(object : OnCompleteListener\<FeatureAvailabilityResult\> { \`\`override fun onSuccess(result: FeatureAvailabilityResult) { \`\`when (result) { \`\`FeatureAvailabilityResult.Available -\> { \`\`// Process push available \`\`} \`\`is FeatureAvailabilityResult.Unavailable -\> { \`\`result.cause.resolveForPush(requireContext()) \`\`} \`\`} \`\`} \`\`override fun onFailure(throwable: Throwable) { \`\`// Process error \`\`} \`\`})
使用推送令牌的方法
关键词:RuStore,开发者,文档,RuStoreSDK,推送通知,使用推送令牌,推送令牌#####。用户获取推送令牌
在库初始化之后,您可以使用 RuStorePushClient.getToken() 方法来获取当前用户的push令牌。
如果用户没有推送令牌,则该方法将创建并返回新的推送令牌。
RuStorePushClient.getToken().addOnCompleteListener(object : OnCompleteListener\<String?\> { \`\`override fun onFailure(throwable: Throwable) { \`\`// Process error \`\`} \`\`override fun onSuccess(result: String?) { \`\`// Process success \`\`}})
删除用户的推送令牌
在初始化库之后,您可以使用 RuStorePushClient.deleteToken() 方法来删除用户当前的推送令牌。
RuStorePushClient.deleteToken().addOnCompleteListener(object : OnCompleteListener\<Unit\> { \`\`override fun onFailure(throwable: Throwable) { \`\`// Process error \`\`} \`\`override fun onSuccess(result: Unit) { \`\`// Process success \`\`}})
用于处理推送主题的方法
订阅主题的推送通知
在初始化库之后,您可以使用 RuStorePushClient.subscribeToTopic("your_topic_name") 方法来订阅主题。
RuStorePushClient.subscribeToTopic( \"your_topic_name\" ).addOnCompleteListener(object : OnCompleteListener\<Unit\> { \`\`override fun onFailure(throwable: Throwable) { \`\`// Process subscribe error \`\`} \`\`override fun onSuccess(result: Unit) { \`\`// Process subscribe success \`\`}})
取消订阅主题的推送通知
在初始化库之后,您可以使用 RuStorePushClient.unsubscribeFromTopic("your_topic_name") 方法来取消订阅主题。
RuStorePushClient.unsubscribeFromTopic( \"your_topic_name\" ).addOnCompleteListener(object : OnCompleteListener\<Unit\> { \`\`override fun onFailure(throwable: Throwable) { \`\`// Process unsubscribe error \`\`} \`\`override fun onSuccess(result: Unit) { \`\`// Process unsubscribe success \`\`}})
从RuStore SDK 获取数据
关键词: RuStore,开发者,文档,RuStoreSDK,推送通知 数据 数据获取。为了从RuStoreSDK获取数据,创建您自己的服务,该服务继承自 RuStoreMessagingService。
class MessagingService: RuStoreMessagingService() { \`\`override fun onNewToken(token: String) { \`\`} \`\`override fun onMessageReceived(message: RemoteMessage) { \`\`} \`\`override fun onDeletedMessages() { \`\`} \`\`override fun onError(errors: List\<RuStorePushClientException\>) { \`\`} \`\`}
方法
- onNewToken - 在接收到新的推送令牌时将被调用。调用此方法后,您的应用程序负责将新的推送令牌传递到自己的服务器。
- onMessageReceived - 在接收到新的推送通知时将被调用。如果notification对象中有数据,RuStoreSDK将自动显示通知。如果您不希望RuStoreSDK自动显示通知,应使用data对象,并保留notification对象为空。但无论如何都会调用onMessageReceived方法。可以从message.data字段获取推送通知的payload(Map<String, String>)。
- onDeletedMessages - 如果一个或多个推送通知没有被送达到设备,将会调用此方法。这可能是因为通知的生命周期在送达设备前已经结束。在调用此方法时,建议与您的服务器同步,以免错过数据。
- onError - 如果在初始化过程中发生错误,将会调用此方法。
可能的错误
UnauthorizedException
- 用户在RuStore应用程序中未授权。HostAppNotInstalledException
- 用户设备上未安装RuStore应用程序。HostAppBackgroundWorkPermissionNotGranted
- RuStore应用程序没有后台运行权限。
有方法将在后台模式下被调用。
通知结构体
关键词: RuStore,开发者,文档,RuStoreSDK,推送通知,结构体#####,完整通知的结构体
public data class RemoteMessage( \`\`val messageId: String?, \`\`val priority: Int, \`\`val ttl: Int, \`\`val collapseKey: String?, \`\`val data: Map\<String, String\>, \`\`val rawData: ByteArray?, \`\`val notification: Notification?)
-
messageId
- 消息的唯一ID。它是每个消息的标识符; -
priority
- 返回优先级值**(当前不考虑)**。可能的选项包括:0
-UNKNOWN
:
| - 1
- HIGH
;
| - 2
- NORMAL
.
ttl
- 返回Int类型的推送通知生命周期(以秒为单位);collapseKey
- 通知组的标识符**(当前不考虑)**;data
- 一个字典,在其中可以传递额外的通知数据;rawData
- 以二进制数组形式的data字典;notification
- 通知对象。
对象的结构体Notification
public data class Notification( \`\`val \#### String?, \`\`val body: String?, \`\`val channelId: String?, \`\`val imageUrl: Uri?, \`\`val color: String?, \`\`val icon: String?, \`\`val clickAction: String? \`\`)
-
title
- 通知的标题; -
body
- 通知的正文; -
channelId
- 可以指定的渠道,用于发送通知(适用于Android 8.0及更高版本); -
imageUrl
- 插入通知中的图片的直接链接(图片大小不超过1兆字节); -
color
- 通知的颜色(Notification.color)。颜色需要以十六进制格式传递,为字符串格式(例如:"#A52A2A"); -
icon
- 通知的图标。图标应存放在应用程序的资源中(res/drawable)。参数的值是一个字符串,与资源的名称匹配:- 在res/drawable中有一个名为small_icon.xml的图标,在代码中通过R.drawable.small_icon访问。为了在通知中显示此图标,服务器需要在"icon"参数中设置值"small_icon"。
-
clickAction
- intent点击通知时,用于打开活动的intent action。
创建发送通知的渠道
对于将要发送通知的渠道,适用以下优先级顺序:
- 如果推送通知中包含channelId字段,那么RuStoreSDK将把通知发送到这个指定的渠道。同时,您的应用程序负责提前创建这个渠道。
- 如果推送通知中没有channelId字段,但您的应用程序在AndroidManifest.xml中指定了一个渠道参数,则将使用AndroidManifest.xml中的渠道。您的应用程序负责创建这个渠道。
- 如果推送通知中没有channelId字段,并且您的应用程序的AndroidManifest.xml中没有设置默认渠道,则RuStoreSDK将自行创建一个渠道并向其发送通知。以后,所有未指定渠道的通知都将发送到这个渠道。
当点击通知时打开Activity
默认情况下,点击通知时,RuStoreSDK会打开具有"android.intent.action.MAIN"action的活动。如果存在clickAction字段,RuStoreSDK将打开符合指定action的Intent filter的活动。
为了在点击通知时(也适用于默认活动)RuStoreSDK能够打开活动,您需要在应用程序的清单中对应的活动元素添加一个字符串。没有这字符串,点击通知时RuStoreSDK将无法打开活动。
事件日志记录
关键词:RuStore,开发者,文档,RuStoreSDK,推送通知,连接,事件日志记录。如果您想要日志记录推送通知库的事件,请在调用 RuStorePushClient.init 时添加 logger 参数 - 这个参数对于初始化是可选的。
为此,您需要实现 Logger 接口:
interface Logger { \`\`fun verbose(message: String, throwable: Throwable? = null ) \`\`fun debug(message: String, throwable: Throwable? = null ) \`\`fun info(message: String, throwable: Throwable? = null ) \`\`fun warn(message: String, throwable: Throwable? = null ) \`\`fun error(message: String, throwable: Throwable? = null ) \`\`fun createLogger(tag: String): Logger}
果 Logger 没有被传递,将使用默认的实现,它使用 AndroidLog。
public class DefaultLogger( \`\`private val tag: String? = null ,) : Logger { \`\`override fun verbose(message: String, throwable: Throwable?) { \`\`Log.v(tag, message, throwable) \`\`} \`\`override fun debug(message: String, throwable: Throwable?) { \`\`Log.d(tag, message, throwable) \`\`} \`\`override fun info(message: String, throwable: Throwable?) { \`\`Log.i(tag, message, throwable) \`\`} \`\`override fun warn(message: String, throwable: Throwable?) { \`\`Log.w(tag, message, throwable) \`\`} \`\`override fun error(message: String, throwable: Throwable?) { \`\`Log.e(tag, message, throwable) \`\`} \`\`override fun createLogger(tag: String): Logger { \`\`val newTag = if ( this .tag != null ) { \`\`\"\${this.tag}:\$tag\" \`\`} else { \`\`tag \`\`} \`\`return DefaultLogger(newTag) \`\`}}
错误处理
可能的错误:
RuStoreNotInstalledException()
- 用户设备上未安装 RuStore。RuStoreOutdatedException()
- 用户设备上安装的 RuStore 不支持推送通知功能。RuStoreUserUnauthorizedException()
- 用户未在 RuStore 中授权。RuStoreFeatureUnavailableException()
- RuStore 没有在后台工作的权限。RuStoreException(message: String)
- RuStore的基本错误,其他错误均继承自此。
果您想使用 UI 接口来处理错误,请使用 resolveForPush 方法。
fun RuStoreException.resolveForPush(context: Context)