为什么我不能注册我的Android设备? xam.pushnotification

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我不能注册我的Android设备? xam.pushnotification相关的知识,希望对你有一定的参考价值。

我在我的xamarin.forms项目中使用xam.plugin.pushnotification

我的主要活动

protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);

        //inicializa imageCircle
        ImageCircleRenderer.Init();

        //inicializa o mapa
        global::Xamarin.FormsMaps.Init(this, bundle);

        //shared Preferences
        App.Init(new androidUserPreferences());

        //Gerenciador de memória
        CachedImageRenderer.Init();

        try
        {
            AppContext = this.ApplicationContext;
            CrossPushNotification.Initialize<CrossPushNotificationListener>("my sender");
            StartPushService();
        }
        catch (Exception e)
        {
            var s = e.Message;
        }

        AndroidUserPreferences sharedPref = new AndroidUserPreferences();
        if ( sharedPref.GetString("token") == " ")
        {
            GetTokenTask myTask = new GetTokenTask();
            myTask.Execute(this);
        }

        LoadApplication(new App());
    }

    public static void StartPushService()
    {
        AppContext.StartService(new Intent(AppContext, typeof(PushNotificationService)));

        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat)
        {

            PendingIntent pintent = PendingIntent.GetService(AppContext, 0, new Intent(AppContext, typeof(PushNotificationService)), 0);
            AlarmManager alarm = (AlarmManager)AppContext.GetSystemService(Context.AlarmService);
            alarm.Cancel(pintent);
        }
    }

    public static void StopPushService()
    {
        AppContext.StopService(new Intent(AppContext, typeof(PushNotificationService)));
        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat)
        {
            PendingIntent pintent = PendingIntent.GetService(AppContext, 0, new Intent(AppContext, typeof(PushNotificationService)), 0);
            AlarmManager alarm = (AlarmManager)AppContext.GetSystemService(Context.AlarmService);
            alarm.Cancel(pintent);
        }
    }

我的听众在我的pcl中

public class  CrossPushNotificationListener : IPushNotificationListener
{

    public void OnMessage(JObject values, DeviceType deviceType)
    {
        Debug.WriteLine("Message Arrived");
    }

    public void OnRegistered(string token, DeviceType deviceType)
    {
        Debug.WriteLine(string.Format("Push Notification - Device Registered - Token : {0}", token));
    }

    public void OnUnregistered(DeviceType deviceType)
    {
        Debug.WriteLine("Push Notification - Device Unnregistered");

    }

    public void OnError(string message, DeviceType deviceType)
    {
        Debug.WriteLine(string.Format("Push notification error - {0}",message));
    }

    public bool ShouldShowNotification()
    {
        return true;
    }
}

}

在app.cs(PCL)中注册(尝试LOL)

 public App()
    {
        InitializeComponent();

        CrossPushNotification.Current.Register();
        MainPage = new NavigationPage(new Views.Splash2());
    }

我使用包名在firebase中注册了我的项目,然后我在那里创建了一个项目,并获得了发件人ID ...但是......在调用“cross ... current.register()”之后的某个地方(它没有显示)我在哪里),我有一个例外

FATAL UNHANDLED EXCEPTION:System.TypeLoadException:无法使用标记0100005a解析类型(来自typeref,类/程序集Android.Gms.Gcm.Iid.InstanceID,Xamarin.GooglePlayServices.Gcm,Version = 1.0.0.0,Culture = neutral,PublicKeyToken =空值)

我需要在我的pcl项目中安装xamarin.gcm吗?现在它只在我的android项目中

答案

尝试将CrossPushNotification.Current.Register ();调用为OnCreate方法。像这样:

protected override void OnCreate(Bundle bundle)
{
    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;

    base.OnCreate(bundle);

    global::Xamarin.Forms.Forms.Init(this, bundle);

    //inicializa imageCircle
    ImageCircleRenderer.Init();

    //inicializa o mapa
    global::Xamarin.FormsMaps.Init(this, bundle);

    //shared Preferences
    App.Init(new AndroidUserPreferences());

    //Gerenciador de memória
    CachedImageRenderer.Init();

    try
    {
        AppContext = this.ApplicationContext;
        CrossPushNotification.Initialize<CrossPushNotificationListener>("my sender");
        //call register method here
        CrossPushNotification.Current.Register();
        StartPushService();
    }
    catch (Exception e)
    {
        var s = e.Message;
    }

    AndroidUserPreferences sharedPref = new AndroidUserPreferences();
    if ( sharedPref.GetString("token") == " ")
    {
        GetTokenTask myTask = new GetTokenTask();
        myTask.Execute(this);
    }

    LoadApplication(new App());
}
另一答案

我不得不迁移到1.2.5-beta,它确实有效,但插件最近宣布为DEPRECATED。 这是个坏消息。

为了支持monoandroid80,我不得不分叉xam.plugin.pushnotification并手动更新其packages.config。

很快就会有其他选择,只能迁移。

以上是关于为什么我不能注册我的Android设备? xam.pushnotification的主要内容,如果未能解决你的问题,请参考以下文章

无法使用Xam.Plugin.Media插件

android.view.InflateException: Binary XML file line #1: Error inflating class <unknown> in Xam

如何注册我的 android 应用程序以解析网站

Xamarin表单,在Visual Studio Android Emulator上运行的应用程序但在真实设备上崩溃

什么是 GCM 注册 ID?

如何使用 parse.com 将 Android 设备注册到推送通道