我有一个Xamarin Android应用程序。收到推送通知后,如果应用程序处于活动状态且位于前台,我可以打开该应用程序。但是,如果应用程序在后台或被杀死,应用程序将无法打开。
已遵循下面页面中所述的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 :(得分:1)
在几天后浪费时间之后,我想出了一种在背景中接受推送并处理或修改它的替代方案
public override void HandleIntent(Intent p0)
每次前景和背景都会调用此函数,但在杀死此函数后无法正常工作。