10/05/2024
At skabe en fængslende mobilapp handler ikke kun om funktionalitet, men i høj grad også om brugeroplevelsen. En afgørende del af en positiv brugeroplevelse er at holde brugerne opdaterede og engagerede. Push notifikationer er et uvurderligt værktøj til dette formål, der muliggør en øjeblikkelig og præcis kommunikation med dine brugere. I denne dybdegående guide vil vi udforske, hvordan du nemt kan implementere push notifikationer i dine Xamarin.Forms applikationer ved hjælp af Firebase, en kraftfuld platform til app-udvikling.
Firebase er en omfattende service fra Google, der tilbyder en bred vifte af værktøjer til at strømline udviklingsprocessen for web- og mobilapplikationer. Fra autentifikation og databaser til analyse og netop push notifikationer, giver Firebase udviklere mulighed for at fokusere på at skabe innovative funktioner, mens Firebase håndterer den underliggende infrastruktur. For at komme i gang med push notifikationer via Firebase, skal du først have et Firebase-projekt opsat og din Xamarin.Forms app konfigureret til at kommunikere med det.
Lad os dykke ned i processen trin for trin.
Nødvendige Værktøjer og Konfiguration
Før vi begynder kodningen, er det vigtigt at sikre, at du har de rette værktøjer installeret og konfigureret. Det primære værktøj, vi skal bruge, er FirebasePushNotification plugin'et, som kan tilføjes via NuGet Package Manager i dit Xamarin.Forms projekt.
Opsætning af Firebase Miljøet
Firebase er en platform, der accelererer udviklingen af web- og mobilapps. Det er en del af Google Cloud Platform og tilbyder en række nyttige værktøjer, som ofte er nødvendige for simple projekter. Disse inkluderer autentifikation, realtidsdatabaser, analyse og selvfølgelig push notifikationer. For at bruge Firebase til push notifikationer, skal du først oprette et projekt på Firebase-konsollen.
Når du har oprettet dit Firebase-projekt, skal du registrere din applikation. Dette indebærer at downloade en konfigurationsfil, der indeholder de nødvendige oplysninger for, at din app kan kommunikere med Firebase. For Android-projekter hedder denne fil google-services.json, og for iOS-projekter hedder den GoogleService-Info.plist. Denne fil skal placeres i de respektive platformsprojekter i din Xamarin.Forms løsning.
Trin til Projektopsætning i Firebase
1. Registrer din Applikation: Gå til Firebase-konsollen og tilføj din app. Vælg de platforme (Android og iOS), din app understøtter.
2. Download Konfigurationsfilen: Efter registrering vil du blive bedt om at downloade den relevante konfigurationsfil (google-services.json for Android, GoogleService-Info.plist for iOS). Gem disse filer.
3. Tilføj Firebase SDK (Android): For Android-projekter vil Firebase-konsollen typisk bede dig om at tilføje Firebase SDK'en direkte. Da vi bruger Xamarin.Forms og et plugin, er dette trin ofte unødvendigt for selve SDK'en, da plugin'et håndterer integrationen.
4. Opret din App: Dette er det sidste trin i Firebase-opsætningen, som kan tage lidt tid. Du kan vælge at springe dette trin over, hvis du allerede har et eksisterende projekt.
Implementering på Android
Lad os nu se på de specifikke trin for at få push notifikationer til at fungere på Android-platformen.
Tilføjelse af Internet Tilladelse
For at din app kan modtage push notifikationer, skal den have adgang til internettet. Åbn din AndroidManifest.xml fil i dit Android-projekt. Inden for <application> tagget, tilføj følgende linje for at give appen internettilladelse:
<uses-permission android:name="android.permission.INTERNET" />Integration af google-services.json
Placer den downloadede google-services.json fil i rodmappen af dit Android-projekt. Derefter skal du højreklikke på filen i Solution Explorer, vælge 'Build Action' og sikre dig, at den er sat til GoogleServicesJson. Hvis du ikke kan finde denne indstilling, kan du prøve at rense og genopbygge dit projekt.
Oprettelse af MainApplication Klassen
For at initialisere Firebase push notifikations-plugin'et korrekt, skal vi oprette en brugerdefineret Application klasse. Opret en ny C# fil, f.eks. MainApplication.cs, og tilføj følgende kode:
using System; using Android.App; using Android.OS; using Android.Runtime; using Plugin.FirebasePushNotification; [Application] public class MainApplication: Application { public MainApplication(IntPtr handle, JniHandleOwnership transer): base(handle, transer) { } public override void OnCreate() { base.OnCreate(); // Initialiser Firebase Push Notification Manager // Sørg for at definere en standard notifikationskanal for Android 8.0 (Oreo) og nyere if (Build.VERSION.SdkInt >= BuildVersionCodes.O) { FirebasePushNotificationManager.DefaultNotificationChannelId = "FirebasePushNotificationChannel"; FirebasePushNotificationManager.DefaultNotificationChannelName = "General"; } #if DEBUG FirebasePushNotificationManager.Initialize(this, true); // True for debug builds #else FirebasePushNotificationManager.Initialize(this, false); // False for release builds #endif // Abonner på notifikationshændelser (valgfrit, men nyttigt for debugging) CrossFirebasePushNotification.Current.OnNotificationReceived += (s, p) => { // Håndter modtagne notifikationer her }; } }Denne klasse initialiserer Firebase-plugin'et og sætter en standard notifikationskanal, hvilket er påkrævet for nyere Android-versioner.
Håndtering i MainActivity
I din MainActivity.cs fil, skal du sørge for, at FirebasePushNotificationManager.ProcessIntent kaldes i OnCreate-metoden. Dette sikrer, at indgående notifikationer bliver korrekt behandlet, når appen startes fra en notifikation:
protected override void OnCreate(Bundle savedInstanceState) { // ... anden kode i OnCreate ... base.OnCreate(savedInstanceState); // Initialiser Xamarin.Forms Xamarin.Essentials.Platform.Init(this, savedInstanceState); LoadApplication(new App()); // Håndter indkommende intents til push notifikationer FirebasePushNotificationManager.ProcessIntent(this, Intent); }Implementering på iOS
Nu fortsætter vi med opsætningen for iOS-platformen.
Integration af GoogleService-Info.plist
Placer den downloadede GoogleService-Info.plist fil i rodmappen af dit iOS-projekt. Højreklik på filen i Solution Explorer, vælg 'Build Action' og sæt den til BundleResource. Sørg også for, at 'Copy to Output Directory' er sat til 'Do not copy'.
Aktivering af Remote Notification Background Mode
For at din app kan modtage push notifikationer, mens den kører i baggrunden, skal du aktivere "Remote notifications" under "Background Modes" i din app's Info.plist fil. Du kan redigere Info.plist filen direkte eller via egenskabsvinduet.
Derudover skal du tilføje en nøgle kaldet FirebaseAppDelegateProxyEnabled til din Info.plist fil og sætte dens værdi til NO. Dette er vigtigt for at undgå konflikter med Firebase's egen håndtering af app delegate.
Initialisering i AppDelegate
I din AppDelegate.cs fil, skal du initialisere FirebasePushNotificationManager, før du kalder LoadApplication. Opret eller modificer FinishedLaunching-metoden:
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { // Hent device token og initialiser Firebase var settings = UIUserNotificationSettings.New(); settings.Categories = new UIUserNotificationCategory[0]; // Du kan tilføje custom actions her UIApplication.Instantiate().RegisterUserNotificationSettings(settings); // Initialiser FirebasePushNotificationManager // Pass true for enable verbose logging (useful for debugging) FirebasePushNotificationManager.Initialize(launchOptions, true); // Registrer for push notifikationer var pushSettings = UIUserNotificationSettings.GetDefaultAppRegisterSettings(); UIApplication.SharedApplication.RegisterForRemoteNotifications(pushSettings); // Load your Xamarin.Forms App LoadApplication(new App()); return base.FinishedLaunching(application, launchOptions); }Du skal også override følgende metoder i din AppDelegate for at håndtere registrering og modtagelse af notifikationer:
// Kaldes når enheden er registreret for push notifikationer public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { CrossFirebasePushNotification.Current.RegisterForRemoteNotifications(deviceToken); System.Diagnostics.Debug.WriteLine($"Device Token: {deviceToken.Description}"); } // Kaldes hvis registreringen fejler public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error) { CrossFirebasePushNotification.Current.RegisterForRemoteNotificationsFailed(error); System.Diagnostics.Debug.WriteLine($"Failed to register for remote notifications: {error.LocalizedDescription}"); } // Kaldes når en notifikation modtages public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) { CrossFirebasePushNotification.Current.DidReceiveMessage(userInfo); System.Diagnostics.Debug.WriteLine($"Received Notification: {userInfo}"); // Håndter notifikationen, hvis appen er aktiv eller i baggrunden completionHandler(UIBackgroundFetchResult.NewData); }Brug af Firebase Push Notification API
Nu hvor vi har sat platformspecifikke konfigurationer op, kan vi begynde at arbejde med selve API'en i vores delte Xamarin.Forms projekt.
Håndtering af Notifikationshændelser
Åbn din App.xaml.cs fil. I konstruktøren kan du abonnere på forskellige hændelser for at håndtere modtagelse og åbning af notifikationer. Dette giver dig mulighed for at reagere på notifikationer, uanset om appen kører i forgrunden, baggrunden eller er lukket.
public App() { InitializeComponent(); // Opsætning af hovedsiden MainPage = new NavigationPage(new MainPage()); // Eller din foretrukne startside // Abonner på TokenRefresh hændelsen // Denne hændelse udløses, når enhedens token opdateres CrossFirebasePushNotification.Current.OnTokenRefresh += async (s, p) => { System.Diagnostics.Debug.WriteLine($"TOKEN REFRESHED: {p.Token}"); // Her kan du sende det nye token til din backend-server await SendTokenToServer(p.Token); }; // Abonner på OnNotificationReceived hændelsen // Denne hændelse udløses, når en notifikation modtages, mens appen er i forgrunden CrossFirebasePushNotification.Current.OnNotificationReceived += (s, p) => { System.Diagnostics.Debug.WriteLine($"NOTIFICATION RECEIVED: {p.Data}"); // Håndter modtagne data her, f.eks. vis en in-app besked foreach (var data in p.Data) { System.Diagnostics.Debug.WriteLine($"{data.Key}: {data.Value}"); } // Du kan også vise en brugerdefineret pop-up eller opdatere UI }; // Abonner på OnNotificationOpened hændelsen // Denne hændelse udløses, når brugeren klikker på en notifikation for at åbne appen CrossFirebasePushNotification.Current.OnNotificationOpened += (s, p) => { System.Diagnostics.Debug.WriteLine($"NOTIFICATION OPENED: {p.Data}"); // Håndter åbning af notifikationer her // F.eks. navigere til en specifik side baseret på notifikationsdata foreach (var data in p.Data) { System.Diagnostics.Debug.WriteLine($"{data.Key}: {data.Value}"); } // Eksempel på navigation: // if (p.Data.ContainsKey("navigateTo")) // { // Device.BeginInvokeOnMainThread(() => // { // // Naviger til den angivne side // // Application.Current.MainPage.Navigation.PushAsync(new TargetPage()); // }); // } }; } // Simpel metode til at simulere afsendelse af token til server private async System.Threading.Tasks.Task SendTokenToServer(string token) { // Implementer logik til at sende token til din backend her await System.Threading.Tasks.Task.Delay(100); // Simulerer netværkskald System.Diagnostics.Debug.WriteLine("Token sent to server."); }Test af Push Notifikationer
For at teste din implementering kan du bruge Firebase-konsollen til at sende testnotifikationer. Du kan vælge at sende til specifikke enheder eller til alle enheder, der er registreret for din app. Sørg for, at din app er installeret på en fysisk enhed (eller en emulator med de rette services) for at modtage notifikationerne.
Tabel: Sammenligning af Platformspecifikke Krav
| Funktion | Android | iOS |
|---|---|---|
| Konfigurationsfil | google-services.json | GoogleService-Info.plist |
| Internet Tilladelse | <uses-permission android:name="android.permission.INTERNET" /> i AndroidManifest.xml | Implicit via netværksforbindelse |
| Baggrundsfunktioner | Kræver MainApplication klasse | Background Modes i Info.plist (Remote notifications) |
| App Delegate Konfiguration | FirebasePushNotificationManager.ProcessIntent i MainActivity | FirebasePushNotificationManager.Initialize og metode-overrides i AppDelegate |
| Build Action for Konfig.fil | GoogleServicesJson | BundleResource |
Ofte Stillede Spørgsmål (FAQ)
Spørgsmål: Hvad sker der, hvis jeg ikke modtager notifikationer?
Svar: Tjek følgende:
- Er
google-services.json/GoogleService-Info.plistkorrekt placeret og sat med den rette Build Action? - Er internettilladelsen angivet i AndroidManifest.xml?
- Er Remote notifications aktiveret i iOS Info.plist?
- Er din enhed registreret korrekt hos Firebase? Tjek logfilerne for fejlmeddelelser.
- Sender du notifikationen fra Firebase-konsollen til den korrekte enhedstoken eller emne?
Spørgsmål: Hvordan sender jeg data med en push notifikation?
Svar: Når du sender en notifikation fra Firebase, kan du inkludere yderligere data i JSON-format. Disse data vil være tilgængelige i p.Data dictionaryen i OnNotificationReceived og OnNotificationOpened hændelserne.
Spørgsmål: Kan jeg sende notifikationer, når appen er lukket?
Svar: Ja, Firebase håndterer dette. Når appen er lukket, vil brugeren se notifikationen i systemets notifikationscenter. Når brugeren klikker på den, vil appen blive startet, og OnNotificationOpened hændelsen vil blive udløst med notifikationsdata.
Spørgsmål: Hvordan håndterer jeg notifikationskanaler på Android?
Svar: Fra Android 8.0 (Oreo) og frem, skal du definere notifikationskanaler. FirebasePushNotificationManager giver dig mulighed for at sætte en standardkanal (DefaultNotificationChannelId og DefaultNotificationChannelName), men du kan også oprette og administrere dine egne kanaler for mere finkornet kontrol.
Med disse trin burde du nu have en solid forståelse af, hvordan du implementerer push notifikationer i dine Xamarin.Forms applikationer. Dette er en kraftfuld funktion, der kan forbedre brugerengagementet markant og holde dine brugere informeret om vigtige opdateringer og begivenheder i din app. Husk at teste grundigt på begge platforme for at sikre en problemfri oplevelse.
Tak fordi du læste med! 💚
Hvis du vil læse andre artikler, der ligner Implementer Push Notifikationer med Xamarin, kan du besøge kategorien Teknologi.
