Notifications Enabled (#760)

* Notifications Enabled with default static text

notifications enabled with default static text

code improvement

added the share key

* added the changelog

* notification ID is added to the json only if it exists

* renamed Bundle.mainApp to app and updated the strings from localazy

* made a struct for the APNSPayload

* APNS Payload fix
This commit is contained in:
Mauro
2023-04-05 20:16:30 +02:00
committed by GitHub
parent 8a56649289
commit 0bce9918e6
18 changed files with 146 additions and 46 deletions
@@ -0,0 +1,47 @@
//
// Copyright 2023 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import Foundation
struct APSAlert: Encodable {
let locKey: String
let locArgs: [String]
enum CodingKeys: String, CodingKey {
case locKey = "loc-key"
case locArgs = "loc-args"
}
}
struct APSInfo: Encodable {
let mutableContent: Int
let alert: APSAlert
enum CodingKeys: String, CodingKey {
case mutableContent = "mutable-content"
case alert
}
}
struct APNSPayload: Encodable {
let aps: APSInfo
let pusherNotificationClientIdentifier: String?
enum CodingKeys: String, CodingKey {
case aps
case pusherNotificationClientIdentifier = "pusher_notification_client_identifier"
}
}
@@ -84,24 +84,20 @@ class NotificationManager: NSObject, NotificationManagerProtocol {
private func setPusher(with deviceToken: Data, clientProxy: ClientProxyProtocol) async -> Bool {
do {
let defaultPayload = [
"aps": [
"mutable-content": 1,
"alert": [
"loc-key": "Notification",
"loc-args": []
]
]
]
let configuration = await PusherConfiguration(identifiers: .init(pushkey: deviceToken.base64EncodedString(),
appId: ServiceLocator.shared.settings.pusherAppId),
kind: .http(data: .init(url: ServiceLocator.shared.settings.pushGatewayBaseURL.absoluteString,
format: .eventIdOnly,
defaultPayload: defaultPayload.jsonString)),
appDisplayName: "\(InfoPlistReader.main.bundleDisplayName) (iOS)",
deviceDisplayName: UIDevice.current.name,
profileTag: pusherProfileTag(),
lang: Bundle.preferredLanguages.first ?? "en")
let defaultPayload = APNSPayload(aps: APSInfo(mutableContent: 1,
alert: APSAlert(locKey: "Notification",
locArgs: [])),
pusherNotificationClientIdentifier: clientProxy.restorationToken?.pusherNotificationClientIdentifier)
let configuration = try await PusherConfiguration(identifiers: .init(pushkey: deviceToken.base64EncodedString(),
appId: ServiceLocator.shared.settings.pusherAppId),
kind: .http(data: .init(url: ServiceLocator.shared.settings.pushGatewayBaseURL.absoluteString,
format: .eventIdOnly,
defaultPayload: defaultPayload.toJsonString())),
appDisplayName: "\(InfoPlistReader.main.bundleDisplayName) (iOS)",
deviceDisplayName: UIDevice.current.name,
profileTag: pusherProfileTag(),
lang: Bundle.preferredLanguages.first ?? "en")
try await clientProxy.setPusher(with: configuration)
MXLog.info("[NotificationManager] set pusher succeeded")
return true
@@ -21,6 +21,7 @@ enum NotificationConstants {
static let roomIdentifier = "room_id"
static let eventIdentifier = "event_id"
static let unreadCount = "unread_count"
static let pusherNotificationClientIdentifier = "pusher_notification_client_identifier"
}
enum Category {
@@ -52,15 +52,15 @@ struct NotificationItemProxy {
// }
var title: String {
"Title"
InfoPlistReader(bundle: .app).bundleDisplayName
}
var subtitle: String? {
nil
L10n.notification
}
var isNoisy: Bool {
true
false
}
var avatarURL: URL? {
@@ -26,12 +26,6 @@ class NotificationServiceProxy: NotificationServiceProxyProtocol {
}
func notificationItem(roomId: String, eventId: String) async throws -> NotificationItemProxy? {
nil
// try await Task.dispatch(on: .global()) {
// guard let item = try self.service.getNotificationItem(roomId: roomId, eventId: eventId) else {
// return nil
// }
// return .init(notificationItem: item)
// }
NotificationItemProxy()
}
}