<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-android'">
<PackageReference Include="Xamarin.AndroidX.Preference">
<Version>1.2.1.3</Version>
</PackageReference>
</ItemGroup>
<ApplicationId></ApplicationId>
<resources>
<string name="com.google.firebase.crashlytics.mapping_file_id">none</string>
</resources>
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Plugin.Firebase.CloudMessaging;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
HandleIntent(Intent);
CreateNotificationChannelIfNeeded();
}
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
HandleIntent(intent);
}
private static void HandleIntent(Intent intent)
{
FirebaseCloudMessagingImplementation.OnNewIntent(intent);
}
private void CreateNotificationChannelIfNeeded()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
CreateNotificationChannel();
}
}
private void CreateNotificationChannel()
{
var channelId = $"{PackageName}.general";
var notificationManager = (NotificationManager)GetSystemService(NotificationService);
var channel = new NotificationChannel(channelId, "General", NotificationImportance.Default);
notificationManager.CreateNotificationChannel(channel);
FirebaseCloudMessagingImplementation.ChannelId = channelId;
FirebaseCloudMessagingImplementation.SmallIconRef = Resource.Drawable.splash;
}
using Plugin.Firebase.Auth;
using Plugin.Firebase.Bundled.Shared;
using Microsoft.Extensions.Logging;
using Plugin.Firebase.Crashlytics;
using Microsoft.Maui.LifecycleEvents;
#if IOS
using Plugin.Firebase.Bundled.Platforms.iOS;
#else
using Plugin.Firebase.Bundled.Platforms.Android;
#endif
private static MauiAppBuilder RegisterFirebaseServices(this MauiAppBuilder builder)
{
builder.ConfigureLifecycleEvents(events =>
{
#if IOS
events.AddiOS(iOS => iOS.FinishedLaunching((app, launchOptions) => {
CrossFirebase.Initialize(CreateCrossFirebaseSettings());
return false;
}));
#else
events.AddAndroid(android => android.OnCreate((activity, _) =>
CrossFirebase.Initialize(activity, CreateCrossFirebaseSettings())));
CrossFirebaseCrashlytics.Current.SetCrashlyticsCollectionEnabled(true);
#endif
});
builder.Services.AddSingleton(_ => CrossFirebaseAuth.Current);
return builder;
}
private static CrossFirebaseSettings CreateCrossFirebaseSettings()
{
return new CrossFirebaseSettings(
isAuthEnabled: true,
isCloudMessagingEnabled: true,
isAnalyticsEnabled: true
);
}
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
using Plugin.Firebase.CloudMessaging;
await CrossFirebaseCloudMessaging.Current.CheckIfValidAsync();
var token = await CrossFirebaseCloudMessaging.Current.GetTokenAsync();
using FirebaseAdmin;
using FirebaseAdmin.Messaging;
using Google.Apis.Auth.OAuth2;
private async Task<string> GetToken()
{
var stream = await FileSystem.OpenAppPackageFileAsync("token.txt");
var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
private async void ReadFireBaseAdminSdk()
{
var stream = await FileSystem.OpenAppPackageFileAsync("admin_sdk.json");
var reader = new StreamReader(stream);
var jsonContent = reader.ReadToEnd();
if (FirebaseMessaging.DefaultInstance == null)
{
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromJson(jsonContent)
});
}
}
string _deviceToken = Convert.ToString(await GetToken());
var androidNotificationObject = new Dictionary<string, string>
{
{ "NavigationID", "2" }
};
var obj = new Message
{
Token = _deviceToken,
Notification = new Notification
{
Title = "Title",
Body = "Message Body"
},
Data = androidNotificationObject,
};
var response = await FirebaseMessaging.DefaultInstance.SendAsync(obj);
public class PushNotificationRequest
{
public List<string> registration_ids { get; set; } = new List<string>();
public NotificationMessageBody notification { get; set; }
public object data { get; set; }
}
public class NotificationMessageBody
{
public string title { get; set; }
public string body { get; set; }
}