gpt4 book ai didi

android - 单击带有 firebase 的推送通知中的操作并做出 native react

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:20:47 28 4
gpt4 key购买 nike

我已经在我的应用程序中实现了推送通知并正常运行。现在,当有人点击通知时,应用程序正在打开。

除此之外,当用户按下通知时,我想做另一件事:

<强>1。向服务器发布请求(我想保留有人点击通知的记录)。

<强>2。像现在一样打开应用

我的问题是我该怎么做?我需要在服务器端或 react native 端实现它?如果有人有关于如何操作的教程(适用于 android 和 iOS 甚至其中之一),那将会有很大帮助!

我找了很多但没有找到可以帮助我的东西。

我正在添加我的工具:

在服务器端:

       public void sendNotification(String token,String msg)  {

// This registration token comes from the client FCM SDKs.
String registrationToken =token;

// See documentation on defining a message payload.
Message message = Message.builder()
.setNotification(new com.google.firebase.messaging.Notification( null,msg))
.setToken(registrationToken).setApnsConfig(ApnsConfig.builder().setAps(Aps.builder().setSound("default").build()).build()).setAndroidConfig(AndroidConfig.builder().setNotification(AndroidNotification.builder().setSound("default").build()).build())
.build();

try {
String response = FirebaseMessaging.getInstance().send(message);
} catch (FirebaseMessagingException e) {

}
}

关于 React Native:对于安卓:

 public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
private static int count = 0;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//Displaying data in log
//It is optional
Log.d(TAG, "Notification Message TITLE: " + remoteMessage.getNotification().getTitle());
Log.d(TAG, "Notification Message BODY: " + remoteMessage.getNotification().getBody());
Log.d(TAG, "Notification Message DATA: " + remoteMessage.getData().toString());
String click_action= remoteMessage.getNotification().getClickAction();
//Calling method to generate notification
sendNotification(remoteMessage.getNotification().getTitle(),
remoteMessage.getNotification().getBody(), remoteMessage.getData());
}
//This method is only generating push notification
private void sendNotification(String messageTitle, String messageBody, Map<String, String> row) {
PendingIntent contentIntent = null;
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
//.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(contentIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(count, notificationBuilder.build());
count++;
}
}

在 iOS 上:

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
[FIRApp configure];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"**"
initialProperties:nil
launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];

return YES;

}

// Required to register for notifications
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{

[RCTPushNotificationManager didRegisterUserNotificationSettings:notificationSettings];

}
// Required for the register event.
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[RCTPushNotificationManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
// Required for the notification event. You must call the completion handler after handling the remote notification.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

{
[RCTPushNotificationManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
//NSLog(@"push-notification received: %@", notification)
}
// Required for the registrationError event.
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
[RCTPushNotificationManager didFailToRegisterForRemoteNotificationsWithError:error];
}
// Required for the localNotification event.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[RCTPushNotificationManager didReceiveLocalNotification:notification];
}

当我获得 token 时:

  setNotification(userid){

const version = DeviceInfo.getUniqueID()
firebase.app().onReady().then(app => {
const again= AsyncStorage.getItem('deviceToken', (err, token) => {
this.props.profileActions.updateLoginTrack()
console.log("checkingTokenFromLogin",token)
console.log('version', version)
if(token==null) {
console.log("tokenNull")

app.messaging().getToken()
.then(fcmToken => {
if (fcmToken) {
console.log('fcmtokenApp', fcmToken)
this.saveDeviceToken(fcmToken)
//need to save in database too
let deviceTokenData = {
userId: userid,
deviceUniqueId: version,
deviceToken: fcmToken,
}
this.props.profileActions.updateDeviceToken(deviceTokenData)

} else {
console.log('error with getting token')
}
})


}

谢谢你的帮助

最佳答案

解决方案:

我找到的解决方案是

right here

我只用了函数

getInitialNotification()

使用此功能,您可以在应用关闭时触发通知。

如果您想在应用程序处于后台时触发通知,请使用此功能:

onNotificationOpened()

有了这个函数我没有使用监听器(它对我不起作用),我只在

componentDidMount

不在

componentWillUnmount

希望它能帮助别人并为你节省一些时间

关于android - 单击带有 firebase 的推送通知中的操作并做出 native react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52607136/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com