Browse Source

add app/utils/notification.js

wudebin 6 months ago
parent
commit
24bb981d61
1 changed files with 81 additions and 0 deletions
  1. 81 0
      Strides-SPAPP/app/utils/notification.js

+ 81 - 0
Strides-SPAPP/app/utils/notification.js

@@ -0,0 +1,81 @@
+import PushNotificationIOS from "@react-native-community/push-notification-ios";
+import PushNotification, { Importance } from "react-native-push-notification";
+
+global.notifyToken = {};
+// Must be outside of any component LifeCycle (such as `componentDidMount`).
+PushNotification.configure({
+  //(可选)生成Token时调用(iOS和Android)
+  onRegister: function (token) {
+    console.log("TOKEN:", token);
+    global.notifyToken = token;
+  },
+  // (必需)在收到或打开远程通知或打开本地通知时调用
+  onNotification: function (notification) {
+    console.log("NOTIFICATION:", notification);
+
+    /*if (notification.title) {
+      //TODO 处理通知
+      notification.channelId = "10186";
+      notification.smallIcon = "ic_notification";
+      notification.showWhen = true;
+      PushNotification.localNotification(notification);
+    } else if (notification.data) {
+      //TODO 处理消息
+      
+    }*/
+    //(必需)在收到或打开远程通知或打开本地通知时调用
+    if (isIOS && notification.finish) {
+      notification.finish(PushNotificationIOS.FetchResult.NoData);
+    }
+  },
+
+  // (可选)当按下Registered Action且invokeApp为false时调用,如果为true,将调用onNotification(Android)
+  onAction: function (notification) {
+    //console.log("ACTION:", notification.action);
+    //console.log("NOTIFICATION:", notification);
+
+    // process the action
+  },
+
+  //(可选)当用户注册远程通知失败时调用。通常发生在APN出现问题时,或者设备是模拟器时(操作系统)
+  onRegistrationError: function(err) {
+    console.info(err.message, err);
+  },
+
+  // 仅限IOS(可选):默认值:all - Permissions to register.
+  permissions: {
+    alert: true,
+    badge: true,
+    sound: true,
+  },
+
+  // 初始通知自动弹出
+  // default: true
+  popInitialNotification: true,
+
+  /**
+   *(可选)默认值:true
+   *-指定是否请求权限(ios)和令牌(android和ios),
+   *-否则,必须稍后调用PushNotificationsHandler.requestPermissions()
+   *-如果未使用远程通知或未安装Firebase,请使用以下命令:
+   * requestPermissions:Platform.OS==='ios'
+   */
+  requestPermissions: true,
+});
+
+PushNotification.createChannel(
+  {
+    channelId: "10186", // (required)
+    channelName: "Application Messaging", // (required)
+    channelDescription: "Application notification center, remind of the charging process", // (optional) default: undefined.
+    playSound: false, // (optional) default: true
+    soundName: "default", // (optional) See `soundName` parameter of `localNotification` function
+    importance: Importance.HIGH, // (optional) default: Importance.HIGH. Int value of the Android notification importance
+    vibrate: true, // (optional) default: true. Creates the default vibration pattern if true.
+  },
+  //(created) => console.log(`createChannel returned '${created}'`) // (optional) callback returns whether the channel was created, false means it already existed.
+);
+
+/*PushNotification.getChannels(function (channel_ids) {
+  console.log('channel_ids', channel_ids); // ['channel_id_1']
+});*/