iOS 發(fā)送本地推送通知

App在后臺的情況希望通知用戶看到信息時使用本地推送通知實現(xiàn)。
1.導(dǎo)入系統(tǒng)框架

#import <UserNotifications/UserNotifications.h>

2.注冊本地通知樣式

UIApplication* application = [UIApplication sharedApplication];
    if ([application currentUserNotificationSettings]) {
      UIUserNotificationSettings* setting = [UIUserNotificationSettings
          settingsForTypes:UIUserNotificationTypeBadge |
                           UIUserNotificationTypeSound |
                           UIUserNotificationTypeAlert
                categories:nil];
      [application registerUserNotificationSettings:setting];
    }

3.清除之前注冊通知

[application cancelAllLocalNotifications];

如果不清除歷史通知,可能會收到之前的全部通知。
4.設(shè)置本次通知內(nèi)容

UILocalNotification* localNotif = [[UILocalNotification alloc] init];
// 發(fā)送時間
    localNotif.fireDate =[NSDate dateWithTimeIntervalSinceNow:0];
// 在通知中心要展示的通知內(nèi)容
    localNotif.alertBody = @"本地推送通知";
// 通知攜帶的內(nèi)容信息,開發(fā)者自行處理
    localNotif.userInfo = @{@"userid":@(123), @"message":@"通知"};
// 自定義同事提示聲音,必須是.caf格式音頻文件
    localNotif.soundName = @"voip_call.caf";
// 通知唯一標識,可以是msgId,用戶刪除、查找通知
    localNotif.alertAction = @"notificationId";
    [application scheduleLocalNotification:localNotif];

以上方法在 iOS10之后被棄用,iOS 開始使用UNUserNotificationCenter
具體邏輯大概類似。UNUserNotificationCenter的內(nèi)容更加豐富,可以通過它自行定義通知顯示樣式,功能更加強大。

UNUserNotificationCenter* center =
      [UNUserNotificationCenter currentNotificationCenter];
  UNMutableNotificationContent* content =
      [[UNMutableNotificationContent alloc] init];
  content.body =  @"本地推送通知";
  UNNotificationSound* sound =
      [UNNotificationSound soundNamed:@"voip_call.caf"];
  content.sound = sound;
  content.userInfo = @{@"userid":@(123), @"message":@"通知"};
  UNTimeIntervalNotificationTrigger* tirgger =
      [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:0.1
                                                         repeats:NO];
/// Identifier 通知唯一標識,用于刪除、查找通知
  UNNotificationRequest* request =
      [UNNotificationRequest requestWithIdentifier:@"notificationId"
                                           content:content
                                           trigger:tirgger];

  [center addNotificationRequest:request
           withCompletionHandler:^(NSError* _Nullable error) {
             NSLog(@"%@本地推送 :( 報錯 %@", @"notificationKey", error);
           }];

最后接收本地推送通知

- (void)application:(UIApplication*)application
    didReceiveLocalNotification:(UILocalNotification*)notification {
  
}

iOS10之后
// 點擊推送消息后回調(diào)

- (void)userNotificationCenter:(UNUserNotificationCenter*)center
    didReceiveNotificationResponse:(UNNotificationResponse*)response
             withCompletionHandler:(void (^)(void))completionHandler {
  NSLog(@"center content : %@", response.notification.request.content.userInfo);
  
}

有時候需要刪除通知中心的通知,類似微信撤回消息時會撤回通知


- (void)deleteAVChatLocalNotificationId:(NSString *)notificationId {
    __block BOOL has = NO;
    UIApplication* application = [UIApplication sharedApplication];
    if (@available(iOS 10.0, *)) {
        UNUserNotificationCenter* center =
        [UNUserNotificationCenter currentNotificationCenter];
        [center getPendingNotificationRequestsWithCompletionHandler:^(
                                                                      NSArray<UNNotificationRequest*>* _Nonnull requests) {
                                                                          for (UNNotificationRequest* request in requests) {
                                                                              if ([request.identifier isEqualToString:notificationId]) {
                                                                                  has = YES;
                                                                                  break;
                                                                              }
                                                                          }
                                                                      }];
        if (has) {
            [center
             removeDeliveredNotificationsWithIdentifiers:@[notificationId]];
        }
    } else {
        NSArray* localNotifications = [application scheduledLocalNotifications];
        for (UILocalNotification* local in localNotifications) {
            if ([local.alertAction isEqualToString:notificationId]) {
                [application cancelLocalNotification:local];
                has = YES;
                break;
            }
        }
    }
    if (has) {
        NSInteger num = [application applicationIconBadgeNumber];
        if (num > 1) {
            [application setApplicationIconBadgeNumber:num - 1];
        } else {
            [application setApplicationIconBadgeNumber:0];
        }
    }
}

mp3轉(zhuǎn) caf
第一步:獲取MP3文件路徑,為了方便測試,這里把文件放到了桌面上,地址為 :/Users/Mina/Desktop/1.mp3

第二步:設(shè)置CAF文件的輸出路徑,這里也放到了桌面上,路徑為:/Users/Mina/Desktop/2.caf

第三步:打開終端輸入命令:
afconvert /Users/Mina/Desktop/1.mp3 /Users/Mina/Desktop/2.caf -d ima4 -f caff -v
(注:不要忘記空格)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 許多集成的步驟個推官網(wǎng)都有了,這里只寫關(guān)于推送的遠程推送和本地通知的步驟和代碼。APP在后臺時:走蘋果的APNS通...
    AllureJM閱讀 2,974評論 1 9
  • 極光推送: 1.JPush當前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,887評論 10 16
  • 概述 在多數(shù)移動應(yīng)用中任何時候都只能有一個應(yīng)用程序處于活躍狀態(tài),如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,722評論 1 8
  • //發(fā)送通知 UILocalNotification *notification=[[UILocalNotific...
    韓七夏閱讀 1,696評論 1 0
  • 在簡單項目中,有使用到apns推送服務(wù),許多文章有涉及到卻沒有講清楚。最近做福路通項目,有使用到,做一個總結(jié)。 推...
    天空的守望者閱讀 977評論 0 3

友情鏈接更多精彩內(nèi)容