User Reach Practices: SMS, Push, In‑App Banners, and Widget Implementations
This article explains the concept of user reach, why it matters for acquisition, activation, retention and monetization, and details practical implementations of SMS, push notifications, in‑app banners and Android widgets—including configuration, code snippets, common pitfalls and optimization strategies.
User reach is defined as the act of delivering messages to users, which can be divided into display and guidance layers and is essential for product operation in mobile Internet.
The article first distinguishes two reach scenarios based on app state: (1) when the app is inactive, external methods such as SMS, push notifications and desktop widgets are used; (2) when the app is active, internal methods such as in‑app pop‑ups, fixed operation slots and feed recommendations are employed.
SMS Reach – Although SMS is an older channel, it remains valuable for verification codes, repayment reminders, account changes and marketing notices. To enable direct navigation to a native page, Android App Links are configured:
1. Add an IntentFilter with android:autoVerify="true" for VIEW actions, BROWSABLE and DEFAULT categories, and http/https schemes.
2. Publish a digital‑asset‑links JSON file at https://yourdomain/.well-known/assetlinks.json that maps the domain to the app package and SHA‑256 certificate fingerprints.
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "xxx.xxx.xx",
"sha256_cert_fingerprints": ["xx:xx...."]
}
}
]3. In the target activity, parse the URL and perform the landing‑page navigation.
4. If the link does not work, verify the asset file, the intent filter, and the link strategy using commands such as:
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "http://yourdomain"Push Notification Reach – The article discusses vendor push services (Huawei, Xiaomi, OPPO, Vivo, Meizu) and a self‑built channel. It compares features such as token validity, channel cost, and message personalization. Issues like notification style differences, channel limits, and user‑level channel control (Android 8.0+ notification channels) are addressed, with screenshots of channel settings.
Push targeting methods include:
RegID‑based push for device‑specific messages.
Alias‑based push linking a user’s account to a device.
Tag‑based push for audience segmentation.
MiPush userAccount for multi‑device delivery.
In‑App Banner Reach – A real‑time banner system is built on a model‑driven architecture. User actions are abstracted into relationship models; when a change occurs, a trigger fires, passes through a unified rate‑limit, and is delivered via an MQTT long‑link. The banner view is created, animated, and displayed through a ViewCore layer.
Key metrics: 98% delivery success, 12‑16% click‑through, contributing to >40% business uplift for several product lines.
Widget (AppWidget) Reach – Widgets provide quick access from the launcher. The implementation steps are:
Define an AppWidgetProvider subclass and its appwidget_info.xml in the manifest.
Specify widget attributes (size, layout, update frequency).
Design the widget layout using supported RemoteViews containers (e.g., LinearLayout , ImageView , TextView ).
Optionally add a configuration activity.
Update the widget via AppWidgetManager.updateAppWidget() and handle click events with PendingIntent (prefer setOnClickPendingIntent over broadcast for lower latency).
Common widget problems and solutions:
Rounded‑corner image cropping using Glide with AppWidgetTarget and MultiTransformation : AppWidgetTarget appWidgetTarget = new AppWidgetTarget(context, ivViewId, views, mAppWidgetIds); RequestOptions option = new RequestOptions() .transform(new MultiTransformation<>(new CenterCrop(), new RoundedCorners(connerPX))); GlideApp.with(context) .asBitmap() .load(bgUrl) .apply(option) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(appWidgetTarget);
Custom fonts via Canvas drawing because RemoteViews cannot host custom views.
Click‑response delay on some devices mitigated by using setOnClickPendingIntent instead of broadcast.
Update strategy: for time‑critical data use a Service with a 5‑minute timer; for user‑interaction data trigger refresh on app foreground/background events.
Finally, the article summarizes that the JD Finance client team explored SMS, push, in‑app banners, and widgets, identified issues, and provided concrete solutions, aiming to improve user experience and operational efficiency while continuing to research smarter reach methods.
JD Tech
Official JD technology sharing platform. All the cutting‑edge JD tech, innovative insights, and open‑source solutions you’re looking for, all in one place.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.