SDK push-уведомлений для Godot Engine (версия 1.0.0)
Условия корректной работы SDK
Ниже перечислены условия работы push-уведомлений.
- Подпись тестируемой сборки (например,
debug
) приложения должна совпадать с подписью сборки приложения, которая была загружена в консоль и прошла модерацию ранее (например,release
).
- Используется актуальная версия SDK.
- Приложение загружено в Консоль RuStore.
- Приложение прошло модерацию (публиковать приложение необязательно).
- На устройстве пользователя установлена актуальная версия RuStore.
- Приложение RuStore поддерживает функциональность push-уведомлений.
- Приложению RuStore разрешен доступ к работе в фоновом режиме.
- Пользователь авторизован в RuStore.
- Отпечаток подписи приложения, установленного на девайсе, совпадает с отпечатком подписи приложения, которое загружено в Консоль RuStore.
- Версия Godot 4 — 4.1.4.
Пример реализации
Ознакомьтесь с приложением-примером, чтобы узнать, как правильно интегрировать SDK push-уведомлений.
Подключение в проект
-
Скопируйте проекты плагина и приложения-примера из официального репозитория RuStore на GitFlic.
-
Откройте в вашей IDE проект Android из папки
godot_plugin_libraries
. -
Поместите в папку
godot_plugin_libraries/libs
пакетgodot-lib.xxx.yyy.template_release.aar
, гдеxxx.yyy
версия вашей редакции Godot Engine. -
Выполните сборку проекта командой
gradle assemble
.
При успешном выполнении сборки в папке godot_example/android/plugins
будут созданы файлы:
RuStoreGodotPush.gdap
;RuStoreGodotPush.aar
;RuStoreGodotCore.gdap
;RuStoreGodotCore.aar
.
Обратите особое внимание, что библиотеки плагинов должны быть собраны под вашу версию Godot Engine.
- Скопируйте содержимое папки
godot_example/android/plugins
в папкуyour_project/android/plugins
. - Скопируйте с заменой содержимое папки
godot_example/android/build_example
в папкуgodot_example/android/build
. - В пресете сборки Android в списке Плагины отметьте Ru Store Godot Push и Ru Store Godot Core.
Редактирование манифеста приложения
В файле манифеста your_project/android/build/AndroidManifest.xml
объявите службу, расширяющую RuStoreMessagingService
.
<service
android:name="ru.rustore.godot.pushclient.RuStoreGodotMessagingService"
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="ru.rustore.sdk.pushclient.MESSAGING_EVENT" />
</intent-filter>
</service>
Если нужно изменить иконку или цвет стандартной нотификации, добавьте следующий код.
<meta-data
android:name="ru.rustore.sdk.pushclient.default_notification_icon"
android:resource="@drawable/ic_baseline_android_24" />
<meta-data
android:name="ru.rustore.sdk.pushclient.default_notification_color"
android:resource="@color/your_favorite_color" />
Если нужно переопределить канал уведомлений, добавьте следующий код.
<meta-data
android:name="ru.rustore.sdk.pushclient.default_notification_channel_id"
android:value="@string/pushes_notification_channel_id" />
При добавлении канала push-уведомлений вы должны создать канал самостоятельно.
Запрос разрешения на показ уведомлений в Android 13+
В версии Android 13 появилось новое разрешение для отображения push-уведомлений. Это затронет все приложения, которые работают на Android 13 или выше и испол ьзуют RuStore Push SDK.
По умолчанию RuStore Push SDK версии 1.4.0 и выше включает разрешение POST_NOTIFICATIONS
, определённое в манифесте.
Однако приложению также нужно запросить это разрешение во время выполнения через константу android.permission.POST_NOTIFICATIONS
.
Приложение сможет показывать push-уведомления, только когда пользователь предоставит на это разрешение.
Запрос разрешения на показ push-уведомлений.
// Declare the launcher at the top of your Activity/Fragment:
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
// RuStore Push SDK (and your app) can post notifications.
} else {
// TODO: Inform user that your app will not show notifications.
}
});
private void askNotificationPermission() {
// This is only necessary for API level>= 33 (TIRAMISU)
if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED) {
// RuStore Push SDK (and your app) can post notifications.
} else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
// TODO: display an educational UI explaining to the user the features that will be enabled
// by them granting the POST_NOTIFICATION permission. This UI should provide the user
// "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
// If the user selects "No thanks," allow the user to continue without notifications.
} else {
// Directly ask for the permission
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
}
}
}
Инициализация
Для инициализации понадобится идентификатор проекта из RuStore Консоль. Чтобы получить его, на странице приложения перейдите в раздел Push-уведомления > Проекты и скопируйте значение в поле ID проекта.
Инициализация плагина
Пер ед вызовом методов библиотеки необходимо создать объект клиента push-уведомлений RuStoreGodotPushClient
. Для инициализации клиента выполните метод init
.
const PROJECT_ID = "123456"
const LOG_MODE = ERuStoreLogMode.Item.CUSTOM
const CLIENT_ID_TYPE = ERuStoreClientIdType.Item.GAID
const CLIENT_ID_VALUE = "your_client_id"
var _push_client: RuStoreGodotPushClient = null
func _ready:
_push_client = RuStoreGodotPushClient.get_instance()
_push_client.init(PROJECT_ID, LOG_MODE)
PROJECT_ID
— идентификатор проекта.LOG_MODE
— режим логирования:NONE
— нет логирования;LOGCAT
— вывод сообщений вlogcat
;CUSTOM
— вывод сообщений в событияon_log_*
.
Логирование событий
Если вы хотите логировать события библиотеки push-уведомлений, при инициализации плагина укажите LOG_MODE
равным ERuStoreLogMode.Item.CUSTOM
и единожды выполните подписку на события:
on_log_verbose
;on_log_debug
;on_log_info
;on_log_warn
;on_log_error
.
cfunc _ready:
# Инициализация _push_client
_push_client.on_log_verbose.connect(_on_log_verbose)
_push_client.on_log_debug.connect(_on_log_debug)
_push_client.on_log_info.connect(_on_log_info)
_push_client.on_log_warn.connect(_on_log_warn)
_push_client.on_log_error.connect(_on_log_error)
func _on_log_verbose(message: String):
pass
func _on_log_debug(message: String):
pass
func _on_log_info(message: String):
pass
func _on_log_warn(message: String):
pass
func _on_log_error(message: String):
pass
message
— сообщение лога.
Проверка возможности получать push-уведомления
Условия работы push-уведомлений приведены в разделе Условия корректной работы SDK.
Для проверки того, что приложение RuStore установлено на устройстве пользователя, используйте методcheck_push_availability
.
Перед использованием метода единожды выполните подписку на события:
on_check_push_availability_success
;on_check_push_availability_failure
.
func _ready():
# Инициализация _push_client
_push_client.on_check_push_availability_success.connect(_on_check_push_availability_success)
_push_client.on_check_push_availability_failure.connect(_on_check_push_availability_failure)
func _on_check_push_availability_success(result: RuStoreFeatureAvailabilityResult):
pass
func _on_check_push_availability_failure(error: RuStoreError):
pass
_push_client.check_push_availability()
- Обратный вызов (callback)
on_check_push_availability_success
возвращает объектRuStoreFeatureAvailabilityResult
с информацией о доступности сервиса.
class_name RuStoreFeatureAvailabilityResult extends Object
var isAvailable: bool = false
var cause: RuStoreError = null
func _init(json: String = ""):
if json != "":
var obj = JSON.parse_string(json)
isAvailable = obj["isAvailable"]
if obj.has("cause"):
var jcause = JSON.stringify(obj["cause"])
cause = RuStoreError.new(jcause)
isAvailable
— выполнение условий приёма push-уведомлений:true
— условия выполнены;false
— условия не выполнены.
cause
— информация об ошибке. Структура классаRuStoreError
и все возможные ошибки описаны в разделе Обработка ошибок
- Обратный вызов (callback)
on_check_push_availability_failure
возвращает объектRuStoreError
со всеми прочими ошибками, например, — «Нет соединения с интернетом». Структура классаRuStoreError
описана в разделе Обработка ошибок.
Методы для работы с push-токеном
Получение push-токена пользователя
Если у пользователя нет push-токена, метод создаст и вернёт новый push-токен.
get_token
, чтобы получить текущий push-токен пользователя.
Перед использованием метода единожды выполните подписку на события:
on_get_token_success
;on_get_token_failure
.
func _ready():
# Инициализация _push_client
_push_client.on_get_token_success.connect(_on_get_token_success)
_push_client.on_get_token_failure.connect(_on_get_token_failure)
func _on_get_token_success(data: String):
pass
func _on_get_token_failure(error: RuStoreError):
pass
_push_client.get_token()
-
Обратный вызов (callback)
on_get_token_success
возвращает строку с информацией о текущем push-токене. -
Обратный вызов (callback)
on_get_token_failure
возвращает объектRuStoreError
с информацией об ошибке. Структура классаRuStoreError
описана в разделе Обработка ошибок.
Удаление push-токена пользователя
После инициализации библиотеки вы можете использовать методdelete_token
, чтобы удалить текущий push-токен пользователя.
Перед использованием метода единожды выполните подписку на события:
on_delete_token_success
;on_delete_token_failure
.
func _ready():
# Инициализация _push_client
_push_client.on_delete_token_success.connect(_on_delete_token_success)
_push_client.on_delete_token_failure.connect(_on_delete_token_failure)
func _on_delete_token_success():
pass
func _on_delete_token_failure(error: RuStoreError):
pass
_push_client.delete_token()
Обратный вызов (callback) on_delete_token_failure
возвращает объект RuStoreError
с информацией об ошибке. Структура класса RuStoreError
описана в разделе Обработка ошибок.