我想为在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 项目,但正确的方法是在库/插件中只MyFirebaseInstanceIDService
和MyFirebaseMessagingService
两个服务,没有别的。然后在另一个安卓应用程序或 Unity 游戏中,我实现了 firebase 并在控制台上创建了一个 firebase 项目,在清单中我引用了库/插件/中的服务。AAR。
这就是我解决这个问题的方式。现在的下一个挑战是,当 Unity 应用程序关闭时,服务将停止。