Azure通知中心 - 收到通知时Android应用程序崩溃

时间:2017-07-07 14:41:22

标签: azure xamarin notifications xamarin.android firebase-cloud-messaging

我使用Azure Notification Hub与Firebase Cloud Messaging和Xamarin。当我在后台或使用应用程序时,我可以收到通知。但是,当我从Android当前应用列表中删除该应用时,我能够收到一个通知但在此之后,我有错误" my_app已停止(关闭应用程序)"。知道为什么吗?我没有错误日志,因为它会在应用程序被杀死时发生。 这是我的代码,来自文档

echo com.your.app | adb uninstall

MainActivity.cs:

using System;
using System.Collections.Generic;
using System.Text;

using Android.App;
using Android.Content;
using Android.Util;

using WindowsAzure.Messaging;
using Gcm.Client;

[assembly: Permission(Name = "@PACKAGE_NAME@.permission.C2D_MESSAGE")]
[assembly: UsesPermission(Name = "@PACKAGE_NAME@.permission.C2D_MESSAGE")]
[assembly: UsesPermission(Name ="com.google.android.c2dm.permission.RECEIVE")]

//GET_ACCOUNTS is needed only for Android versions 4.0.3 and below
[assembly: UsesPermission(Name = "android.permission.GET_ACCOUNTS")]
[assembly: UsesPermission(Name = "android.permission.INTERNET")]
[assembly: UsesPermission(Name = "android.permission.WAKE_LOCK")]

namespace Waka.Droid
{
    [BroadcastReceiver(Permission = Gcm.Client.Constants.PERMISSION_GCM_INTENTS)]
    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_MESSAGE },
    Categories = new string[] { "@PACKAGE_NAME@" })]
    [IntentFilter(new string[] {         Gcm.Client.Constants.INTENT_FROM_GCM_REGISTRATION_CALLBACK },
    Categories = new string[] { "@PACKAGE_NAME@" })]
    [IntentFilter(new string[] { Gcm.Client.Constants.INTENT_FROM_GCM_LIBRARY_RETRY },
    Categories = new string[] { "@PACKAGE_NAME@" })]
    public class MyBroadcastReceiver :     GcmBroadcastReceiverBase<PushHandlerService>
    {
        public static string[] SENDER_IDS = new string[] { Constants.SenderID };

        public const string TAG = "MyBroadcastReceiver-GCM";
    }

    [Service] // Must use the service tag
    public class PushHandlerService : GcmServiceBase
    {
        public static string RegistrationID { get; private set; }
        private NotificationHub Hub { get; set; }

        public PushHandlerService() : base(Constants.SenderID)
        {
        }

        protected override void OnRegistered(Context context, string registrationId)
        {
            RegistrationID = registrationId;
            Hub = new NotificationHub(Constants.NotificationHubName, Constants.ListenConnectionString,
                                    context);
            try
            {
                Hub.UnregisterAll(registrationId);
            }
            catch (Exception ex)
            {
                Log.Error(MyBroadcastReceiver.TAG, ex.Message);
            }

            //var tags = new List<string>() { "falcons" }; // create tags if you want
            var tags = new List<string>() { };

            try
            {
                var hubRegistration = Hub.Register(registrationId, tags.ToArray());
            }
            catch (Exception ex)
            {
                Log.Error(MyBroadcastReceiver.TAG, ex.Message);
            }
        }

        protected override void OnMessage(Context context, Intent intent)
        {

            var msg = new StringBuilder();

            if (intent != null && intent.Extras != null)
            {
                foreach (var key in intent.Extras.KeySet())
                     msg.AppendLine(key + "=" + intent.Extras.Get(key).ToString());
            }

            string messageText = intent.Extras.GetString("message");
            if (!string.IsNullOrEmpty(messageText))
            {
                createNotification("Shotgun!", messageText);
            }
            else
            {
                createNotification("Undefined", msg.ToString());
            }
        }

        void createNotification(string title, string desc)
        {
            //Create notification
            var notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;

            //Create an intent to show UI
            var uiIntent = new Intent(this, typeof(MainActivity));
            PendingIntent resultPendingIntent =
            PendingIntent.GetActivity(
                this,
                0,
                uiIntent,
                0
            );
            Notification noti = new Notification.Builder(this)
                                            .SetContentTitle("" + title)
                                            .SetContentText(desc)
                                            .SetSmallIcon(Android.Resource.Drawable.SymActionEmail)
                                            .SetContentIntent(resultPendingIntent)
                                            .SetDefaults(NotificationDefaults.All)
                                            .Build();

        //Show the notification
        notificationManager.Notify(1, noti);
        dialogNotify(title, desc);
    }

    protected void dialogNotify(String title, String message)
    {

        MainActivity.instance.RunOnUiThread(() =>
        {
            AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.instance);
            AlertDialog alert = dlg.Create();
            alert.SetTitle(title);
            alert.SetButton("Ok", delegate
            {
                alert.Dismiss();
            });
            alert.SetMessage(message);
            alert.Show();
        });
    }

    protected override void OnUnRegistered(Context context, string registrationId)
    {
    }

    protected override bool OnRecoverableError(Context context, string errorId)
    {
        return base.OnRecoverableError(context, errorId);
    }

    protected override void OnError(Context context, string errorId)
    {
    }
}
}

0 个答案:

没有答案