Hallo,
ich habe in meinem Xamarin.Android-Projekt ein Problem mit Push-Notifications. Jede meiner Notifications erhält serverseitig eine URL angefügt.
Tippt der Benutzer auf die Benachrichtigung, soll sich eine WebActivity (WebView) mit der URL öffnen.
Das funktioniert mit dem untenstehenden Code super, allerdings nur, wenn die Nachricht in dem Moment reinkommt, in welchem die App auch offen ist. Ich kann mir das Problem nicht wirklich erklären. Gehe ich die Sache grundsätzlich falsch an oder liegt hier lediglich ein kleiner Fehler vor?
Gruß
Code
public override void OnMessageReceived(RemoteMessage remoteMessage)
{
if (remoteMessage.Data.Count > 0)
{
String dataTitle = remoteMessage.GetNotification().Title;
String dataBody = remoteMessage.GetNotification().Body;
string url = "";
if (remoteMessage.Data.ContainsKey("url"))
{
url = remoteMessage.Data["url"];
Uri uri;
if (Uri.TryCreate(url, UriKind.Absolute, out uri))
SendNotification(dataTitle, dataBody, uri.ToString());
else
SendNotification(dataTitle, dataBody, "http://google.de");
}
else
SendNotification(dataTitle, dataBody, "http://yahoo.de");
}
}
private void SendNotification(String title, String body, String url = "")
{
bool hasUrl = (url != null) && (!url.Equals(""));
PendingIntent contentIntent;
Intent intent;
if (hasUrl)
{
intent = new Intent(this, typeof(WebActivity));
intent.PutExtra("url", url);
contentIntent = PendingIntent.GetActivity(this, ++requestCode, intent, PendingIntentFlags.UpdateCurrent);
}
Notification.Builder builder = new Notification.Builder(this)
.SetContentTitle(title)
.SetContentText(body)
.SetContentIntent(contentIntent)
.SetAutoCancel(true)
.SetDefaults(NotificationDefaults.Sound)
.SetSmallIcon(Resource.Drawable.icon);
// Build the notification:
Notification notification = builder.Build();
// Get the notification manager:
NotificationManager notificationManager =
GetSystemService(Context.NotificationService) as NotificationManager;
// Publish the notification:
notificationId++;
notificationManager.Notify(notificationId, notification);
}
Alles anzeigen