• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:44:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我已经在我的应用程序上实现了推送通知及其工作。 现在当有人点击应用程序正在打开的通知时。

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

1.向服务器发布请求(我想记录有人点击了通知)。

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

我的问题是我该怎么做?我需要在服务器端还是在 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) {

    }
}

关于 native react : 安卓系统:

 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)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)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)applicationUIApplication *)application didRegisterUserNotificationSettingsUIUserNotificationSettings *)notificationSettings
  {

    [RCTPushNotificationManager didRegisterUserNotificationSettings:notificationSettings];

     }
 // Required for the register event.
   - (void)applicationUIApplication *)application didRegisterForRemoteNotificationsWithDeviceTokenNSData *)deviceToken
     {
      [RCTPushNotificationManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
       }
 // Required for the notification event. You must call the completion handler after handling the remote notification.
  - (void)applicationUIApplication *)application didReceiveRemoteNotificationNSDictionary *)userInfo
                                                    fetchCompletionHandlervoid (^)(UIBackgroundFetchResult))completionHandler

  {
     [RCTPushNotificationManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
    //NSLog(@"push-notification received: %@", notification)   
     }
  // Required for the registrationError event.
   - (void)applicationUIApplication *)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')
      } 
    })


  }

感谢您的帮助



Best Answer-推荐答案


解决方案:

我找到的解决方案是

right here

我只使用了函数

getInitialNotification()

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

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

onNotificationOpened()

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

中使用了这个函数
componentDidMount

而不是在

componentWillUnmount

希望它能帮助某人并为您节省一些时间

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap