0

我使用xam.plugin.pushnotification我xamarin.forms在我的PCL项目为什么我无法注册我的Android设备? xam.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); 
     } 
    } 

我的听众

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未处理的异常:System.TypeLoadException:未能解决与令牌0100005a类型(从typeref,类/程序集Android.Gms.Gcm.Iid.InstanceID ,Xamarin.GooglePlayServices.Gcm,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null)

是否需要安装xama rin.gcm在我的pcl项目中?现在它只是在我的Android项目

回答

0

尝试调用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()); 
} 
0

我不得不迁移到1.2.5-β过,它的工作,但该插件是最近宣布的DEPRECATED
那真是个坏消息。

为了支持monoandroid80我必须fork xam.plugin.pushnotification并手动更新它的packages.config。

很快就没有别的选择,只能迁移。

相关问题