I'm using UrbanAirship for push notifications. Everything is working fine, but there are certain scenarios where I wouldn't like to display the push notification coming from urban. Do I have to handle this on the server side or can I handle it on the client side?
If possible, how would I handle this on the client side? I've tried canceling the notification, and that works, but it still displays the rollover message in the status bar.
You need to override Airship's notification factory for this:
package your.package;
import android.app.Notification;
import android.content.Context;
import android.support.annotation.NonNull;
import com.urbanairship.push.PushMessage;
import com.urbanairship.push.notifications.DefaultNotificationFactory;
public class PushNotificationFactory extends DefaultNotificationFactory {
public PushNotificationFactory(Context context) {
super(context);
}
public Notification createNotification(@NonNull PushMessage message, int notificationId) {
boolean shouldWeShowNotification = false; // your condition goes here
if (shouldWeShowNotification) {
return super.createNotification(message, notificationId);
} else {
return null;
}
}
}
and when taking off:
UAirship.takeOff(this, new UAirship.OnReadyCallback() {
@Override
public void onAirshipReady(UAirship airship) {
NotificationFactory notificationFactory = new PushNotificationFactory(getApplicationContext());
airship.getPushManager().setNotificationFactory(notificationFactory);
}
});
You need to create a BroadcastReceiver
in your app to intercept the push. You can then choose to display a custom notification or not.
Check out the setup docs http://docs.urbanairship.com/build/android_features.html#set-up
If you're using Kotlin:
class PushNotificationFactory(context: Context) : NotificationFactory(context) {
override fun createNotification(message: PushMessage, notificationId: Int): Notification? {
val notificationWillBeShowed = false // your condition goes here
return if (notificationWillBeShowed) {
// Show notification
super.createNotification(message, notificationId)
} else {
// Prevent notification from showing
null
}
}
}
class UrbanAirshipAutopilot : Autopilot() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onAirshipReady(airship: UAirship) {
airship.pushManager.userNotificationsEnabled = true
val context = UAirship.getApplicationContext()
val notificationFactory = PushNotificationFactory(context)
airship.pushManager.notificationFactory = notificationFactory
if (Build.VERSION.SDK_INT >= 26) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val defaultChannelId = context.getString(R.string.notification_channel_id_default)
val defaultChannelName = context.getString(R.string.notification_channel_name_default)
val channel = NotificationChannel(defaultChannelId, defaultChannelName, NotificationManager.IMPORTANCE_DEFAULT)
notificationManager.createNotificationChannel(channel)
}
}
override fun createAirshipConfigOptions(context: Context): AirshipConfigOptions? {
val defaultChannelId = context.getString(R.string.notification_channel_id_default)
return AirshipConfigOptions.Builder()
.setDevelopmentAppKey(BuildConfig.URBAN_AIRSHIP_APP_KEY_DEVELOPMENT)
.setDevelopmentAppSecret(BuildConfig.URBAN_AIRSHIP_APP_SECRET_DEVELOPMENT)
.setProductionAppKey(BuildConfig.URBAN_AIRSHIP_APP_KEY_PRODUCTION)
.setProductionAppSecret(BuildConfig.URBAN_AIRSHIP_APP_SECRET_PRODUCTION)
.setInProduction(!BuildConfig.DEBUG)
.setGcmSender(BuildConfig.CLOUD_MESSAGING_SENDER_ID) // FCM/GCM sender ID
// .setNotificationIcon(R.drawable.ic_notification)
// .setNotificationAccentColor(ContextCompat(getContext(), R.color.accent))
.setNotificationChannel(defaultChannelId)
.build()
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.