dartway_push_rustore
RuStore as a transport for dartway_push_flutter —
Android only, inert everywhere else.
DwPush(
config: DwPushConfig(
providers: [DwRuStorePush(), DwFirebasePush()],
// ...
),
)
Declared first, it takes Android and stands aside on iOS and web; on an Android device without the RuStore app it stands aside too and the next transport gets its turn.
What this package carries so your app does not
- The messaging service. RuStore delivers to exactly one, and it must do two things the SDK's own does not: write the payload down before showing the notification — the tap may come back hours later to a process that no longer exists — and draw a notification for a data-only message, which the SDK leaves invisible.
- That renderer. The server sends a message with a picture as data only, because RuStore ignores an image in a notification block. The notification appears as text at once and upgrades to the picture when it has been fetched — bounded to HTTPS, 1 MB and 1600 px, in the app's own process.
- The tap.
ActivityAware+onNewIntent, so noMainActivityoverride and no list of payload keys duplicated in Kotlin: whatever arrived is stored whole and handed back as one JSON extra. - The Android 13 permission prompt — no
permission_handlerdependency for a single call.
What the app still owns
In android/app/src/main/AndroidManifest.xml:
<meta-data android:name="ru.rustore.sdk.pushclient.project_id"
android:value="${rustorePushProjectId}" />
<meta-data android:name="ru.rustore.sdk.pushclient.default_notification_icon"
android:resource="@drawable/ic_notification" />
<meta-data android:name="ru.rustore.sdk.pushclient.default_notification_color"
android:resource="@color/notification" />
The project id comes from the RuStore Console and usually differs per flavour. The icon and colour are reused by this package's own renderer — a plugin cannot reach your resources any other way. Two optional entries name the channel in your language:
<meta-data android:name="dev.dartway.push.rustore.channel_id" android:value="my_app_push" />
<meta-data android:name="dev.dartway.push.rustore.channel_name" android:value="Уведомления" />
The RuStore SDK is not on Maven Central; this package declares the repository it lives in, so an
app that pins its own repositories (repositoriesMode.set(FAIL_ON_PROJECT_REPOS)) has to add
https://artifactory-external.vkpartner.ru/artifactory/maven itself.
Testing it
Only on a physical Android device with the RuStore app installed and signed in — there is no emulator path, and a device without RuStore reports itself unavailable, which is the correct behaviour rather than a failure.
Part of DartWay
DartWay is a fullstack Dart framework (Flutter + Serverpod). The framework lives in one repository.
Libraries
- dartway_push_rustore
- RuStore as a DartWay push transport.