反应本机推送通知 onNotification 不会触发
react-native push notification onNotification doesn't trigger
我正在使用 zo0r react-native-push-notification 库。
"react": "16.0.0-alpha.12",
"react-native": "^0.45.1",
"react-native-push-notification": "^3.0.0"
我每次打开应用程序时都会运行此代码:
PushNotification.configure({
onNotification: function(notification) {
console.log('onNotification');
ToastAndroid.show('onNotification', 3000);
}
});
我从后台服务发送本地推送通知:
PushNotification.localNotification({
message: 'Hello World',
smallIcon: 'ic_launcher'
});
通知已送达。当我点击它时,onNotification
方法没有被调用,然后当我收到另一个通知时,它实际上被调用了。似乎只有当应用程序在内存 atm 中时它才有效。
我是不是做错了什么?
我也开了一个GitHubissue
在我的代码中,我在 App
class 之外配置了通知 - 这是一个问题。我刚刚将配置移动到 App 构造函数,现在它工作正常,调用 onNotification 没有问题:
class App extends React.Component {
constructor(props) {
super(props);
PushNotification.configure({ ... });
}
}
最新react-native-push-notification
lib版本推荐如下:https://github.com/zo0r/react-native-push-notification#usage
它是专门为不将配置放入 React 生命周期而编写的。否则 Android 将不会有正确的行为(这一点让我非常痛苦!)。
在这里你有一个很好的教程:
https://product.farewell.io/visible-react-native-push-notifications-that-work-on-both-ios-and-android-5e90badb4a0f
解释不好,但方法很完美。使用 class 来初始化和调用方法。按照他的建议初始化顶部组件中的 class 。它运作良好。
使用本教程完成缺失的信息:
https://shift.infinite.red/react-native-node-js-and-push-notifications-e851b279a0cd
祝你好运!
在我的例子中,我遵循了文档中的所有内容,包括 android 的 React 生命周期,除了下面的更改,我没有配置正确的 intent 过滤器操作,即
<action android:name="com.google.firebase.MESSAGING_EVENT" />
进行以下更改,这应该有效
<service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService" android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
之前我使用这个动作是因为那个监听器没有触发
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
这是常见问题,使用启动画面时会出现该问题。
像这样编辑清单:
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.INFO" />
</intent-filter>
</activity>
我正在使用 zo0r react-native-push-notification 库。
"react": "16.0.0-alpha.12",
"react-native": "^0.45.1",
"react-native-push-notification": "^3.0.0"
我每次打开应用程序时都会运行此代码:
PushNotification.configure({
onNotification: function(notification) {
console.log('onNotification');
ToastAndroid.show('onNotification', 3000);
}
});
我从后台服务发送本地推送通知:
PushNotification.localNotification({
message: 'Hello World',
smallIcon: 'ic_launcher'
});
通知已送达。当我点击它时,onNotification
方法没有被调用,然后当我收到另一个通知时,它实际上被调用了。似乎只有当应用程序在内存 atm 中时它才有效。
我是不是做错了什么?
我也开了一个GitHubissue
在我的代码中,我在 App
class 之外配置了通知 - 这是一个问题。我刚刚将配置移动到 App 构造函数,现在它工作正常,调用 onNotification 没有问题:
class App extends React.Component {
constructor(props) {
super(props);
PushNotification.configure({ ... });
}
}
最新react-native-push-notification
lib版本推荐如下:https://github.com/zo0r/react-native-push-notification#usage
它是专门为不将配置放入 React 生命周期而编写的。否则 Android 将不会有正确的行为(这一点让我非常痛苦!)。 在这里你有一个很好的教程: https://product.farewell.io/visible-react-native-push-notifications-that-work-on-both-ios-and-android-5e90badb4a0f 解释不好,但方法很完美。使用 class 来初始化和调用方法。按照他的建议初始化顶部组件中的 class 。它运作良好。 使用本教程完成缺失的信息: https://shift.infinite.red/react-native-node-js-and-push-notifications-e851b279a0cd 祝你好运!
在我的例子中,我遵循了文档中的所有内容,包括 android 的 React 生命周期,除了下面的更改,我没有配置正确的 intent 过滤器操作,即
<action android:name="com.google.firebase.MESSAGING_EVENT" />
进行以下更改,这应该有效
<service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService" android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
之前我使用这个动作是因为那个监听器没有触发
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
这是常见问题,使用启动画面时会出现该问题。 像这样编辑清单:
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.INFO" />
</intent-filter>
</activity>