2 回答
TA贡献1900条经验 获得超5个赞
因此,经过大量研究,我终于通过参考Sendbird的示例应用程序,粘贴下面的链接,成功地得到了解决方案。
https://github.com/sendbird/SendBird-JavaScript/tree/master/react-native-redux-sample
解决方案:-
您需要在 App. Js componentDidMount() 中注册通道。
应用程序 js 的代码
componentDidMount(){
const channel = new firebase.notification.Android.Channel(
"YOUR-CHANNEL-ID",
"CHANNEL NAME",
firebase.notification.Android.Importance.Max).setDescription("description);
firebase.notifications().android.createChannel(chanel);
//don't forget to add handler for app state change
Appstate.addEventListener('change',this._handleAppStateChange);
)
}
_handleAppStateChange = currentAppState =>{
const sb = SendBird.getInstance();
if(sb)
{
if(currentAppState == "active")
{
sb.setForegroundState();
}
else if(currentAppState == "background")
{
sb.setBackgroundState();
}
}
现在在主索引中.js添加以下行
import backgroundPush from './Services/push';
AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage',()=>backgroundPush) //add this line after appRegistry Component and this is a key to be added to get notitification in background when using sendbird, whicch is nowhere mentioned in its official doc. It is in the sample App I have also added link to it.
导入的推送/背景Push是一个包含以下源代码的文件:-
push.js //此文件在示例应用程序中
import firebase from 'react-native-firebase'
export default async message => {
try {
const text = message.data.message;
const payload = JSON.parse(message.data.sendbird);
const localNotification = new firebase.notifications.Notification({
show_in_foreground: true
}).android
.setChannelId('channel_id')
.android.setSmallIcon('sendbird_ic_notification')
.android.setPriority(firebase.notifications.Android.Priority.High)
.setNotificationId(message.messageId)
.setTitle('New message')
.setSubtitle(`Unread message: ${payload.unread_message_count}`)
.setBody(text)
.setData(payload);
return firebase.notifications().displayNotification(localNotification);
} catch (e) {
return Promise.resolve();
}
};
这是适用于我的查询Android后台推送通知的解决方案,未收到。虽然,仍然在努力接收推送通知iOS方面。
TA贡献1842条经验 获得超21个赞
对于安卓设置为通知有效负载"priority": "high"
{
"to": "cjUyGxLa3pU...",
"data": {
"title": "Some title",
"body": "Some text"
},
"priority": "high"
}
对于ios,我认为它将能够通过使用我的以下代码来获得后台和前台通知工作:AppDelegate.m
#import <UserNotifications/UserNotifications.h>
#import <Firebase.h>
#import <FirebaseInstanceID/FirebaseInstanceID.h>
#import <FirebaseMessaging.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([FIRApp defaultApp] == nil) {
[FIRApp configure];
}
if ([UNUserNotificationCenter class] != nil) {
// iOS 10 or later
// For iOS 10 display notification (sent via APNS)
[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
requestAuthorizationWithOptions:authOptions
completionHandler:^(BOOL granted, NSError * _Nullable error) {
// …
}];
} else {
// iOS 10 notifications aren’t available; fall back to iOS 8–9 notifications.
UIUserNotificationType allNotificationTypes =
(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings =
[UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
}
[application registerForRemoteNotifications];
[FIRMessaging messaging].delegate = self;
[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Error fetching remote instance ID: %@", error);
} else {
NSLog(@"Remote instance ID token: %@", result.token);
NSString* message = [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
}
}
];
[FIRMessaging messaging].autoInitEnabled = YES;
...
}
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
NSLog(@"FCM registration token: %@", fcmToken);
NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"FCMToken" object:nil userInfo:dataDict];
}
/Called when a notification is delivered to a foreground app.
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
如果你在info.plist上没有这个密钥,那么你也可以添加在更改AppDelegate.m之前先尝试FirebaseAppDelegateProxyEnabled: YESInfo.plist
注意:1.5年前,我使用了相同的react-native-firebase库,我收到了同样的问题,因为后来我搬到了react-native-fcm库,因为该库维护得很好
添加回答
举报