Mobile Development 22 min read

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.

JD Cloud Developers
JD Cloud Developers
JD Cloud Developers
Mastering User Reach: SMS, Push, In‑App Banners & Widgets in Android

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.json

file 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

AppWidgetProvider

subclass 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

GlideApp

with

AppWidgetTarget

and

MultiTransformation

.

Custom fonts: draw text on a

Canvas

within the widget.

Click latency: prefer

setOnClickPendingIntent

over 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.

push notificationsAndroidwidgetSMSuser reachin‑app bannerMobile Notifications
JD Cloud Developers
Written by

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.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.