Xamarin.Forms - Send SMS Using Xamarin.Essentials

Introduction
 
Xamarin.Forms - Send SMS Using Xamarin Essentials 
 
The Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute the data files with an app.
 
Xamarin.Essentials
Xamarin.Forms - Send SMS Using Xamarin Essentials 
 
Xamarin.Essentials plugin provides 20+ cross-platform APIs for mobile application development. Xamarin.Essentials API works with all Xamarin.Forms, Xamarin.Android, Xamarin.iOS, or UWP applications that can be accessed from shared code. When we are developing Xamarin with Android, we have both iOS and UWP apps, but now Xamarin.Essentials overcomes the problem, and developers can access every native platform API using C#. This plugin provides many APIs so initially, there is no need for more plugins in Xamarin. Xamarin.Essentials plugin impacts your app's minimum size.
 
Platform Support
 
Xamarin.Essentials supports the following platforms and operating systems,
 
 Platform Version
 Android 4.4 (API 19) or earlier
 iOS 10.0 or higher
 UWP 10.0.16299.0 or earlier
 
Prerequisites
  • Visual Studio 2017 (Windows or Mac)
Setting up a Xamarin.Forms Project
 
Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself. Choose the Xamarin.Forms App Project under Cross-platform/App in the "New Project" dialog.
 
Xamarin.Forms - Send SMS Using Xamarin Essentials
 
Name your app, select “Use Portable Class Library” for shared code, and target both - Android and iOS.
 
Xamarin.Forms - Send SMS Using Xamarin Essentials 
 
You probably want your project and solution to use the same name as your app. Put it in your preferred folder for projects and click "Create".
 
Xamarin.Forms - Send SMS Using Xamarin Essentials 
 
You now have a basic Xamarin.Forms app. Click the "Play" button to try it out.
 
Xamarin.Forms - Send SMS Using Xamarin Essentials 
 
Setting up the User Interface
 
Go to MainPage.Xaml and write the following code.
 
MainPage.xaml
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"  
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"  
  4.              xmlns:local="clr-namespace:XamarinEssentials"  
  5.              x:Class="XamarinEssentials.MainPage">  
  6.   
  7.     <StackLayout>  
  8.         <StackLayout HorizontalOptions="Center" VerticalOptions="Start">  
  9.          <Image Margin="0,50,0,0" x:Name="imgBanner" Source="banner.png" ></Image>  
  10.          <Image Margin="0,0,0,10" x:Name="imgXamarinEssential" Source="xamarinessential.png" ></Image>  
  11.          <Label Margin="0,0,0,10" FontAttributes="Bold" FontSize="Large" TextColor="#CA6F1E" HorizontalTextAlignment="Center" Text="SMS"></Label>  
  12.          <Entry x:Name="txtNumber" Placeholder="Enter Number"> </Entry>  
  13.          <Entry x:Name="txtMessage" Placeholder="Type something here..."> </Entry>  
  14.          <Button x:Name="btnSms" Text="Send SMS" Clicked="btnSendSms_Clicked"/>  
  15.         </StackLayout>  
  16.     </StackLayout>  
  17.   
  18. </ContentPage>  
Add Xamarin Essentials
 
In this step, add Xamarin.Essentials to your project. You can install Xamarin.Essentials via NuGet, or you can browse the source code on GitHub.
 
Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search for "Xamarin.Essentials" and add Package. Remember to install it for each project (PCL, Android, iO, and UWP).
 
Xamarin.Forms - Send SMS Using Xamarin Essentials 
 
Xamarin.Essentials requires platform-specific setup

Android

The following steps are necessary for Android.
  1. Xamarin.Essentials supports a minimum Android version of 4.4.
  2. Target Android version for compiling must be 8.1, API level 27.
In the Android project's MainActivity that is launched, the Xamarin.Essentials must be initialized in the OnCreate method.
 
MainActivity.cs
  1. Xamarin.Essentials.Platform.Init(this, bundle);  
Xamarin.Essentials must receive any OnRequestPermissionsResult. Write the following code for runtime permission.
 
MainActivity.cs
  1. public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)  
  2. {  
  3.     Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);  
  4.   
  5.     base.OnRequestPermissionsResult(requestCode, permissions, grantResults);  
  6. }  
iOS
 
No additional set up required.
 
UWP
 
No additional set up required.
 
Limitation
  • It supports the devices only, not Simulator/Emulator.
In this step, write the following code for sending the SMS.
 
MainPage.xaml.cs
  1. using Xamarin.Forms;  
  2. using Xamarin.Essentials;  
  3. namespace XamarinEssentials  
  4. {  
  5.     public partial class MainPage : ContentPage  
  6.     {  
  7.         public MainPage()  
  8.         {  
  9.             InitializeComponent();  
  10.         }  
  11.         protected override void OnAppearing()  
  12.         {  
  13.             base.OnAppearing();  
  14.         }  
  15.   
  16.         async void btnSendSms_Clicked(object sender, System.EventArgs e)  
  17.         {  
  18.             if(!string.IsNullOrEmpty(txtNumber.Text))  
  19.             {  
  20.                 await SendSms(txtMessage.Text,txtNumber.Text);  
  21.             }  
  22.   
  23.         }  
  24.   
  25.         public async Task SendSms(string messageText, string recipient)  
  26.         {  
  27.             try  
  28.             {  
  29.                 var message = new SmsMessage(messageText, recipient);  
  30.                 await Sms.ComposeAsync(message);  
  31.             }  
  32.             catch (FeatureNotSupportedException ex)  
  33.             {  
  34.                 await DisplayAlert("Failed""Sms is not supported on this device.""OK");  
  35.             }  
  36.             catch (Exception ex)  
  37.             {  
  38.                 await DisplayAlert("Failed", ex.Message, "OK");  
  39.             }  
  40.         }  
  41.     }  
  42. }  
Click the "Play" button to try it out.
 
Xamarin.Forms - Send SMS Using Xamarin Essentials Xamarin.Forms - Send SMS Using Xamarin Essentials 
  
I hope you have understood how to send an SMS using Xamarin.Essentials in Xamarin.Forms.
 
Thanks for reading. Please share your comments and feedback.