2017-09-23 20 views
0

我有一個Xamarin Android應用程序。收到推送通知後,如果應用程序處於活動狀態且處於前臺狀態,則可以打開該應用程序。但是,如果應用程序在後臺或被殺,應用程序將無法打開。收到Firebase雲消息傳遞後無法打開我的Android後臺應用程序(Xamarin)

已經按照下面的頁面中所述的Xamarin指導原則進行了操作,但是提供的代碼也不起作用。 https://developer.xamarin.com/guides/android/application_fundamentals/notifications/remote-notifications-with-fcm/

我想在接收到FCM推送通知時採取措施(閱讀打開)。如果應用程序已經打開,可以成功完成。我錯過了什麼嗎?具體內容如下

AndroidManifest.xml中

<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /> 
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <category android:name="${applicationId}" /> 
     </intent-filter> 
    </receiver> 

FirebaseInstanceIdService實施

[Service] 
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })] 
public class MyFirebaseIIDService : FirebaseInstanceIdService 
{ 
    const string TAG = "MyFirebaseIIDService"; 
    public override void OnTokenRefresh() 
    { 
     var refreshedToken = FirebaseInstanceId.Instance.Token; 
     Log.Debug(TAG, "Refreshed token: " + refreshedToken); 
     SendRegistrationToAppServer(refreshedToken); 
    } 


    void SendRegistrationToAppServer(string token) 
    { 
     // Add custom implementation here as needed. 

     var android_id = Android.OS.Build.Serial; 
     App.AccessCode(token, android_id); 
    } 

} 

FirebaseMessagingService實施

[Service] 
[IntentFilter(new [] { "com.google.firebase.MESSAGING_EVENT" })] 
public class MyFCMListenerService: FirebaseMessagingService { 
Intent intent; 

public override void OnMessageReceived(RemoteMessage message) { 
    Thread thread = new Thread(() => { 
    Log.Debug("MyGcmListenerService", "Message: thread"); 
    PushHandler pushHandler = PushHandler.GetPushHander(); 
    pushHandler.OnReceiveNewNotification(msg, pushType.ToString()); 

    }); 
    thread.Start(); 
} 
} 

Package.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="AndHUD" version="1.2.0" targetFramework="MonoAndroid60" /> 
    <package id="Plugin.CurrentActivity" version="1.0.1" targetFramework="monoandroid71" /> 
    <package id="SQLite.Net.Core-PCL" version="3.1.1" targetFramework="MonoAndroid60" /> 
    <package id="SQLite.Net-PCL" version="3.1.1" targetFramework="MonoAndroid60" /> 
    <package id="Xam.Plugin.Connectivity" version="3.0.2" targetFramework="monoandroid71" /> 
    <package id="Xam.Plugin.DeviceInfo" version="3.0.1" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Annotations" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Compat" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Core.UI" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Core.Utils" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Design" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Fragment" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Media.Compat" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Transition" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.v4" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.v7.AppCompat" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.v7.CardView" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.v7.MediaRouter" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.v7.Palette" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.v7.RecyclerView" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Android.Support.Vector.Drawable" version="25.4.0.2" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Build.Download" version="0.4.7" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Firebase.Common" version="42.1021.1" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Firebase.Iid" version="42.1021.1" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Firebase.Messaging" version="42.1021.1" targetFramework="monoandroid71" /> 
    <package id="Xamarin.Forms" version="2.3.4.270" targetFramework="monoandroid71" /> 
    <package id="Xamarin.GooglePlayServices.Base" version="42.1021.1" targetFramework="monoandroid71" /> 
    <package id="Xamarin.GooglePlayServices.Basement" version="42.1021.1" targetFramework="monoandroid71" /> 
    <package id="Xamarin.GooglePlayServices.Tasks" version="42.1021.1" targetFramework="monoandroid71" /> 
</packages> 

此外,如果我使用規定的配置FirebaseApp.InitializeApp(this); 然後無法打開應用程序,即使在前臺。爲了解決這個問題,已經使用 google-services.json

我做這行的配置

var options = new FirebaseOptions.Builder() 
      .SetApplicationId("1:******:*****") 
      .SetApiKey("*******-a6-cEUkjxB6EqiO9zmkNcmu") 
      //.SetDatabaseUrl("Firebase-Database-Url") 
      .SetGcmSenderId("******") 
      .Build(); 

      var firebaseApp = FirebaseApp.InitializeApp(this, options); 
      // Generate token in background thread 
      Task.Run(() => { 
       var instanceID = FirebaseInstanceId.Instance; 
       instanceID.DeleteInstanceId(); 
       var iid1 = instanceID.Token; 
       var iid2 = instanceID.GetToken("*****", Firebase.Messaging.FirebaseMessaging.InstanceIdScope); 
      }); 
+0

在你的代碼中沒有發現任何明顯的錯誤,你的'PushHandler'是什麼?您是否嘗試過官方演示[Android FCM Remote Notifications](https://github.com/xamarin/monodroid-samples/tree/master/Firebase/FCMNotifications)? –

+0

是的,我試過官方演示,但是,演示它在後臺無法正常工作。 Push處理程序根據數據有一些修改推送的功能。 –

回答

0

天浪費時間後,我找出一個替代在後臺接受推送和處理或修改

public override void HandleIntent(Intent p0) 

這個函數在每次前景和背景都被調用,但是在殺死這個函數後不會工作。

相關問題