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
声明不存在)。似乎这两种效果的某种组合导致了上述异常。
我正在尝试创建一个 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
声明不存在)。似乎这两种效果的某种组合导致了上述异常。