Newer
Older
Productization_H5_IOS / notice / NotificationService.m
@zhangfeng zhangfeng on 8 Aug 2023 2 KB commit first
//
//  NotificationService.m
//  notice
//
//  Created by 张丰 on 2023/7/13.
//  Copyright © 2023 DCloud. All rights reserved.
//

#import "NotificationService.h"
#import <AVFoundation/AVFoundation.h>
#import <UIKit/UIKit.h>
@interface NotificationService ()

@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@property (nonatomic,assign) NSInteger count;
@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    if([self isMediaPush]) {
        // Modify the notification content here...
        self.bestAttemptContent.sound = [UNNotificationSound soundNamed:@"xiaomi.mp3"];
        [self vibrationTimerActon];
    }
    self.contentHandler(self.bestAttemptContent);
}
//收到推送消息后,会先执行此方法
- (void)vibrationTimerActon {
    self.count ++;
    if(self.count > 8) {
        self.count = 0;
        return;
    }
    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (ino64_t)(1 * NSEC_PER_SEC));
    dispatch_after(time, dispatch_get_main_queue(), ^{
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        //此处SuiteName要与创建App Groups勾选的一致
        NSUserDefaults *shareDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xf.template"];
        NSString *isBackground = [shareDefaults objectForKey:@"isBackground"];
        if([isBackground isEqualToString:@"1"]) {
            [self vibrationTimerActon];
        }
    });
    
}
- (BOOL)isMediaPush {
    
    NSDictionary *push_data = self.bestAttemptContent.userInfo;
    NSString *jsonString = push_data[@"appData"];
    if(jsonString == nil) {
        return false;
    }
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error;
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
    if(dict == nil) {
        return false;
    }
    
    NSInteger mediaType = [dict[@"mediaType"] integerValue];
    if(mediaType == 1 || mediaType == 2) {
        return true;
    } else {
        return false;
    }
}
- (void)serviceExtensionTimeWillExpire {
    // Called just before the extension will be terminated by the system.
    // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
    self.contentHandler(self.bestAttemptContent);
}

@end