NativeScript Angular - 如何添加 android 服务来处理通知? (java.lang.RuntimeException:无法实例化服务)

NativeScript Angular - How can I add an android service to handle notifications? (java.lang.RuntimeException: Unable to instantiate service)

我正在尝试创建一个 android 服务来处理 Firebase 消息(nativescript-plugin-firebase 库不允许我在后台使用纯数据消息),但我似乎无法获得服务正常运行。具体来说,我在收到通知时(有时在应用程序启动时)收到以下异常:

System.err: java.lang.RuntimeException: Unable to instantiate service com.tns.services.CustomFCMService: com.tns.NativeScriptException: Cannot find object id for instance=com.tns.services.CustomFCMService@5a4269d
System.err:     at android.app.ActivityThread.handleCreateService(ActivityThread.java:3940)
System.err:     at android.app.ActivityThread.access00(ActivityThread.java:219)
System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)
System.err:     at android.os.Handler.dispatchMessage(Handler.java:107)
System.err:     at android.os.Looper.loop(Looper.java:214)
System.err:     at android.app.ActivityThread.main(ActivityThread.java:7356)
System.err:     at java.lang.reflect.Method.invoke(Native Method)
System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

我的服务在 TypeScript 中定义如下:

@JavaProxy('com.tns.services.CustomFCMService')
class CustomFCMService extends (com.google as any).firebase.messaging.FirebaseMessagingService {
  constructor() {
    super();
  }

  public init() {
    /* Do nothing */
  }

  public onMessageReceived(message: any) {
    this.super.onMessageReceived(message);
    /* Handle message receipt */
  }
}

我还添加并更改了以下我的 webpack 文件(如果需要,我可以提供文件的其余部分):

// Add your custom Activities, Services and other Android app components here.
const appComponents = [
    "tns-core-modules/ui/frame",
    "tns-core-modules/ui/frame/activity",
    resolve(__dirname, 'src/app/core/android/custom-fcm-service') /* My custom service */
];

最后,我将以下内容添加到我的 AndroidManifest.xml(在 application 标签内):

<service android:name="com.tns.services.CustomFCMService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

我已经尝试更改 AndroidManifest、服务文件和 webpack 配置中的各种内容,但我似乎无法让它工作。

谢谢!

我找到了解决问题的方法。错误代码似乎在我的自定义服务中:

public init() {
    /* Do nothing */
}

删除该方法完全解决了我在上面遇到的问题。

似乎有一个默认的 init 方法,它有一些重要的实现细节,例如将对象 ID 注册到实例。我注意到当我声明那个方法时,我不仅没有调用它的 super 版本,而且在输出的 .java 文件(没有init 声明不存在)。似乎这两种效果的某种组合导致了上述异常。