如何在 Unity 中为 android 设备实现 FCM 推送通知,即使在游戏被杀死时也能正常工作



我想为在unity3D中开发的Android游戏实现Firebase推送通知,即使游戏不在后台运行也能正常工作。专家在许多论坛中建议,您需要创建一个Android插件,该服务始终在后台运行,例如

public class MyFirebaseMessagingService extends FirebaseMessagingService {
public static String TAG = "PUSH";
@Override
public void onCreate() {
super.onCreate();
Log.e("PUSH","FCM Service started");
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.e("PUSH","Push received");
UnityPlayer.UnitySendMessage("Canvas", "PushReceived", "This is your push message");
}
}

此服务将接收推送通知,并通过调用 C# 方法通知 Unity3D 游戏,如下所示。

UnityPlayer.UnitySendMessage("Canvas", "PushReceived", "This is your push message");

然后创建一个 .这个项目的AAR文件,并将其放在\资产\插件\Android中。 我遵循了相同的策略,但 unity3D 从未收到推送。 这是我的插件清单文件。

<?xml version="1.0" encoding="utf-8"?>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>

这对我不起作用。然后我创建另一个清单文件并将其放在 assets/Plugins/Android/AndroidManifest 下.xml并在该文件中添加服务标签,但这种解决方法没有结果。

我怎样才能做到这一点?我已经尝试了一个多星期,但还没有运气。任何帮助都将是非常可观的。

我成功地解决了这个问题。我对这个问题的理解有所不同。我正在使用库实现 firebase 并在同一个库包上创建 firebase 项目,但正确的方法是在库/插件中只MyFirebaseInstanceIDServiceMyFirebaseMessagingService两个服务,没有别的。然后在另一个安卓应用程序或 Unity 游戏中,我实现了 firebase 并在控制台上创建了一个 firebase 项目,在清单中我引用了库/插件/中的服务。AAR。

这就是我解决这个问题的方式。现在的下一个挑战是,当 Unity 应用程序关闭时,服务将停止。