Skip to content
All essays
iOSJanuary 15, 20269 min

SMS vs Push Notifications: Choosing the Right Channel

Compare SMS and push notifications to understand when to use each channel for maximum engagement and user experience

Ü
Ümit Uz
Mobile & Full Stack Developer

Businesses today have multiple mobile communication channels. SMS and push notifications both reach users on their phones, but they serve different purposes. This guide helps you choose the right channel for each use case.

Understanding the Differences

SMS (Short Message Service)

Pros:

  • Works on all phones (98% delivery rate)
  • No app installation required
  • Very high open rates (98%)
  • Works without internet
  • Professional and trusted

Cons:

  • Cost per message
  • 160-character limit
  • No rich media
  • Regulatory compliance required

Push Notifications

Pros:

  • Free to send
  • Rich media support
  • No character limit
  • Deep linking capabilities
  • Action buttons
  • Higher engagement when app is installed

Cons:

  • Requires app installation
  • Can be disabled by users
  • Lower delivery rates
  • Requires internet connection
  • Platform-specific (iOS/Android)

When to Use SMS

Critical Communications

Use SMS for messages that must reach every user:

Transaction Codes

  • 2FA verification codes
  • Password reset links
  • Order confirmations
  • Shipping notifications

Time-Sensitive Alerts

  • Appointment reminders
  • Flight updates
  • Emergency notifications
  • Payment due dates

High-Value Communications

  • Account security alerts
  • Financial transaction confirmations
  • Legal notifications
  • Important updates

SMS Implementation

typescript
// Use SMS for critical updates
export async function sendCriticalAlert(userId: string, message: string) {
  const user = await db.users.findUnique({ where: { id: userId } });

  // SMS ensures delivery even if app isn't installed
  await sendSMS(user.phoneNumber, message);
  
  // Also send push if app is installed
  if (user.hasAppInstalled) {
    await sendPushNotification(userId, message);
  }
}

When to Use Push Notifications

Engagement and Retention

Use push for app engagement and retention:

Feature Updates

  • New feature announcements
  • Product updates
  • Content recommendations
  • Social interactions

Behavioral Triggers

  • "You haven't visited in a while"
  • "New items matching your interests"
  • "Your friend just joined"
  • "Sale starting soon"

Rich Content

  • Image-rich notifications
  • Video previews
  • Interactive buttons
  • Deep links to specific app screens

Push Implementation

typescript
// Use push for engagement
export async function sendNewFeatureAnnouncement(userId: string) {
  const pushPayload = {
    notification: {
      title: 'New Feature Available!',
      body: 'Check out our latest update',
      icon: 'icon.png',
      image: 'feature-preview.png',
    },
    data: {
      deepLink: '/features/new',
      action: 'view_feature',
    },
    actions: [
      { action: 'view', title: 'View Now' },
      { action: 'dismiss', title: 'Later' },
    ],
  };

  await sendPushNotification(userId, pushPayload);
}

Comparative Use Cases

E-commerce

Order Confirmation

  • ✅ SMS: Required for receipt
  • ✅ Push: Nice to have, but not critical

Shipping Update

  • ✅ SMS: Essential for delivery updates
  • ✅ Push: Optional, provides tracking link

Cart Abandonment

  • ✅ SMS: High recovery rate
  • ✅ Push: Good for app users

Sale Announcement

  • ✅ SMS: For VIP customers
  • ✅ Push: For broader audience

Finance

Transaction Alert

  • ✅ SMS: Required for security
  • ✅ Push: Quick access to app

Bill Due Reminder

  • ✅ SMS: Ensures delivery
  • ✅ Push: Easy payment access

Large Purchase Detection

  • ✅ SMS: Fraud prevention
  • ✅ Push: App deep link

Healthcare

Appointment Reminder

  • ✅ SMS: High reliability
  • ✅ Push: Easy rescheduling

Prescription Ready

  • ✅ SMS: Pickup notification
  • ✅ Push: Link to pharmacy details

Test Results

  • ✅ SMS: Privacy-focused delivery
  • ✅ Push: Secure app access

User Preferences

Let Users Choose

typescript
interface NotificationPreferences {
  transactionalSMS: boolean;
  transactionalPush: boolean;
  marketingSMS: boolean;
  marketingPush: boolean;
  quietHours: {
    enabled: boolean;
    start: string; // "22:00"
    end: string; // "08:00"
  };
}

export async function respectUserPreferences(
  userId: string,
  message: string,
  type: 'transactional' | 'marketing'
) {
  const prefs = await getNotificationPreferences(userId);

  // Check quiet hours for marketing
  if (type === 'marketing' && prefs.quietHours.enabled) {
    if (isInQuietHours(prefs.quietHours)) {
      return; // Skip sending
    }
  }

  // Send based on preferences
  if (type === 'transactional') {
    if (prefs.transactionalSMS) {
      await sendSMS(userId, message);
    }
    if (prefs.transactionalPush) {
      await sendPushNotification(userId, message);
    }
  } else {
    if (prefs.marketingSMS) {
      await sendSMS(userId, message);
    }
    if (prefs.marketingPush) {
      await sendPushNotification(userId, message);
    }
  }
}

Cost Considerations

SMS Costs

  • United States: ~$0.0075 per message
  • International: $0.05 - $0.10 per message
  • Volume discounts available

Push Costs

  • Free to send
  • Development and maintenance costs
  • Infrastructure costs

Cost-Effective Strategy

typescript
export async function optimizeCosts(userId: string, message: string) {
  const user = await db.users.findUnique({ where: { id: userId } });

  // Use push for app users (free)
  if (user.hasAppInstalled && user.lastAppOpen > thirtyDaysAgo) {
    await sendPushNotification(userId, message);
    return { method: 'push', cost: 0 };
  }

  // Use SMS for non-app users (costs money)
  await sendSMS(user.phoneNumber, message);
  return { method: 'sms', cost: 0.0075 };
}

Best Practices

For SMS

  1. 1Keep it concise: Respect 160-character limit
  2. 2Personalize: Use recipient's name when appropriate
  3. 3Include opt-out: Always provide unsubscribe option
  4. 4Time wisely: Send during business hours
  5. 5Value over volume: Send only important messages

For Push Notifications

  1. 1Rich content: Use images, videos, and action buttons
  2. 2Deep links: Link directly to relevant content
  3. 3Personalize: Base on user behavior and preferences
  4. 4Segment: Send relevant content to specific groups
  5. 5Test: A/B test messages and timing

Combined Strategy

The most effective approach uses both channels:

typescript
export async function optimalNotificationStrategy(
  userId: string,
  message: string,
  priority: 'critical' | 'high' | 'normal' | 'low'
) {
  const user = await db.users.findUnique({ where: { id: userId } });

  switch (priority) {
    case 'critical':
      // Send both SMS and push
      await sendSMS(user.phoneNumber, message);
      if (user.hasAppInstalled) {
        await sendPushNotification(userId, message);
      }
      break;

    case 'high':
      // Send SMS first, push as backup
      const smsResult = await sendSMS(user.phoneNumber, message);
      if (!smsResult.success && user.hasAppInstalled) {
        await sendPushNotification(userId, message);
      }
      break;

    case 'normal':
      // Send push if app installed, otherwise SMS
      if (user.hasAppInstalled && user.lastAppOpen > thirtyDaysAgo) {
        await sendPushNotification(userId, message);
      } else {
        await sendSMS(user.phoneNumber, message);
      }
      break;

    case 'low':
      // Send push only
      if (user.hasAppInstalled) {
        await sendPushNotification(userId, message);
      }
      break;
  }
}

Conclusion

Neither SMS nor push notifications are universally better. The right choice depends on:

  • Message importance: Critical messages need SMS
  • User app usage: Active app users prefer push
  • Cost considerations: Push is free, SMS costs money
  • Rich media needs: Push supports images, videos
  • Regulatory requirements: Some messages require SMS

The optimal strategy often uses both channels strategically:

  • SMS for critical, transactional messages
  • Push for engagement, retention, and rich content

Let user preferences guide your choice, and always provide value over volume.

Enjoyed this essay? Share it.

Related essays

Next essay
Complete Guide to SMS Integration with Twilio