Mastering User Reach: SMS, Push, In‑App Banners & Widgets in Android
This article explains why user reach is essential for mobile apps and details practical implementations of SMS, push notifications, in‑app banners, and Android widgets, including configuration steps, common issues, and troubleshooting methods to improve delivery success and user experience.
User Reach: Understanding and Implementing SMS, Push, In‑App Banners, and Widgets
Why Implement User Reach
From a user perspective, system messages such as transaction logistics, customer service, billing, loan reminders, and real‑time news need timely delivery. From an app‑operation view, targeted marketing messages (e.g., product promotions) guide users to activity pages. Thus, reach plays a crucial role in acquisition, activation, retention, monetization, and organic spread.
Practical Reach Methods
1. SMS
SMS remains widely used for verification codes, repayment reminders, account changes, and marketing notifications because it can reliably deliver messages directly to users. However, SMS links can only open web pages, not native app pages, which degrades the user experience.
To enable direct navigation to an app page, Android App Links are used. The workflow includes adding an intent filter with
android:autoVerify="true"in the AndroidManifest, publishing a
assetlinks.jsonfile under
https://yourdomain/.well-known/assetlinks.json, and configuring the target package name and SHA‑256 certificate fingerprints.
<code>[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "xxx.xxx.xx",
"sha256_cert_fingerprints": ["xx:xx...."]
}
}
]</code>After configuring the intent filter, the app parses the URL and performs the landing‑page navigation. If the link does not work, verify the asset link file, the intent filter, and device‑specific compatibility.
2. Push Notifications
Google FCM is available but may have reliability issues; therefore, domestic manufacturers (Huawei, Xiaomi, OPPO, Vivo, Meizu) and a self‑built channel are combined. Each channel has different characteristics (e.g., token validity, behavior when the app is killed).
Push channels are integrated via a unified SDK. Example code for creating a notification channel:
<code>ChannelHelper channelHelper = new ChannelHelper(APP_SECRET);
ChannelInfo channelInfo = new ChannelInfo.Builder()
.channelId("id") // required, ≤200 chars
.channelName("name") // required, ≤40 chars
.channelDesc("desc") // optional, ≤300 chars
.notifyType(0) // required, 0 = vibration+sound+LED off
.soundUrl("sound_url") // optional custom ringtone
.build();
Result result = channelHelper.addNewChannel(channelInfo, 1);
</code>Issues such as low delivery rates on OPPO/Vivo were addressed by prompting users to enable notification switches and by classifying messages into “operational” and “system” categories to avoid quota limits.
Additional push targeting methods include RegID‑based, Alias‑based, Tag‑based, and userAccount‑based pushes.
3. In‑App Banners
In‑app banners provide real‑time, high‑impact reach. The architecture consists of a data service layer (collecting user behavior), a transmission layer (MQTT long‑link channel), an app capability layer, a data parsing layer, and a view control layer that renders banner templates with animations and sounds.
Implementation challenges such as global display, page‑specific inclusion/exclusion, and handling multiple concurrent banners are solved by managing a unique key for each banner and caching with a size limit.
Result: banner reach success rate 98%, click‑through rate 12‑16%, contributing to >40% uplift for targeted business lines.
4. Desktop Widgets (AppWidget)
Widgets (AppWidget) allow users to view information and interact without opening the app. Creation steps:
Define an
AppWidgetProvidersubclass and its XML configuration.
Declare the provider in the manifest.
Design the widget layout using supported views (e.g.,
FrameLayout,
LinearLayout,
ImageView,
TextView, etc.).
Optionally provide a configuration activity to initialize the widget.
Update the widget via
AppWidgetManager.updateAppWidget().
Common issues and solutions:
Image rounding: use
GlideAppwith
AppWidgetTargetand
MultiTransformation.
Custom fonts: draw text on a
Canvaswithin the widget.
Click latency: prefer
setOnClickPendingIntentover broadcast receivers.
Update frequency: use a foreground service or lifecycle callbacks to trigger timely refreshes for interactive widgets.
Conclusion
The article shares the JD Finance client team’s exploration of SMS, push, in‑app banners, and widget reach methods, the problems encountered, and the solutions applied, offering practical guidance for developers building robust user‑reach mechanisms in mobile applications.
JD Cloud Developers
JD Cloud Developers (Developer of JD Technology) is a JD Technology Group platform offering technical sharing and communication for AI, cloud computing, IoT and related developers. It publishes JD product technical information, industry content, and tech event news. Embrace technology and partner with developers to envision the future.
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.