From dae9fd3c1f8670e45961e197f29d585f32180508 Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Wed, 25 Mar 2020 11:50:46 +1100 Subject: [PATCH] push pubkey and token to server and store notification setting locally --- Signal/src/AppDelegate.m | 8 ++++- .../LokiPushNotificationManager.swift | 34 +++++++++++++++++++ .../src/Loki/Utilities/LKUserDefaults.swift | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 19db0cfee..1d2df82c4 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -587,7 +587,9 @@ static BOOL isInternalTestVersion = NO; } OWSLogInfo(@"Registered for push notifications with token: %@.", deviceToken); - [LKPushNotificationManager.shared registerWithToken:deviceToken]; + //TODO: For normal push notification test + [LKPushNotificationManager.shared registerWithToken:deviceToken pubkey:self.tsAccountManager.localNumber]; +// [LKPushNotificationManager.shared registerWithToken:deviceToken]; // [self.pushRegistrationManager didReceiveVanillaPushToken:deviceToken]; } @@ -1552,6 +1554,10 @@ static BOOL isInternalTestVersion = NO; __IOS_AVAILABLE(10.0)__TVOS_AVAILABLE(10.0)__WATCHOS_AVAILABLE(3.0)__OSX_AVAILABLE(10.14) { OWSLogInfo(@""); + if (notification.request.content.userInfo[@"remote"]) { + OWSLogInfo(@"[Loki] Ignore remote notifications when app is foreground."); + return; + } [AppReadiness runNowOrWhenAppDidBecomeReady:^() { // We need to respect the in-app notification sound preference. This method, which is called // for modern UNUserNotification users, could be a place to do that, but since we'd still diff --git a/Signal/src/Loki/Utilities/LokiPushNotificationManager.swift b/Signal/src/Loki/Utilities/LokiPushNotificationManager.swift index 9624c4323..f51effb8d 100644 --- a/Signal/src/Loki/Utilities/LokiPushNotificationManager.swift +++ b/Signal/src/Loki/Utilities/LokiPushNotificationManager.swift @@ -15,11 +15,16 @@ final class LokiPushNotificationManager : NSObject { let userDefaults = UserDefaults.standard let oldToken = userDefaults[.deviceToken] let lastUploadTime = userDefaults[.lastDeviceTokenUpload] + let applyNormalNotification = userDefaults[.applyNormalNotification] let now = Date().timeIntervalSince1970 if hexEncodedToken == oldToken && now - lastUploadTime < 2 * 24 * 60 * 60 { print("[Loki] Device token hasn't changed; no need to upload.") return } + if applyNormalNotification { + print("[Loki] Using normal notification; no need to upload.") + return + } // Send token to Loki server let parameters = [ "token" : hexEncodedToken ] #if DEBUG @@ -36,6 +41,35 @@ final class LokiPushNotificationManager : NSObject { } userDefaults[.deviceToken] = hexEncodedToken userDefaults[.lastDeviceTokenUpload] = now + userDefaults[.applyNormalNotification] = false + }, failure: { _, error in + print("[Loki] Couldn't register device token.") + }) + } + + @objc(registerWithToken: pubkey:) + func register(with token: Data, pubkey: String) { + let hexEncodedToken = token.map { String(format: "%02.2hhx", $0) }.joined() + let userDefaults = UserDefaults.standard + let now = Date().timeIntervalSince1970 + // Send token to Loki server + let parameters = [ "token" : hexEncodedToken, + "pubkey": pubkey] + #if DEBUG + let url = URL(string: "https://dev.apns.getsession.org/register")! + #else + let url = URL(string: "https://live.apns.getsession.org/register")! + #endif + let request = TSRequest(url: url, method: "POST", parameters: parameters) + request.allHTTPHeaderFields = [ "Content-Type" : "application/json" ] + TSNetworkManager.shared().makeRequest(request, success: { _, response in + guard let json = response as? JSON else { return } + guard json["code"] as? Int != 0 else { + return print("[Loki] An error occured during device token registration: \(json["message"] as? String ?? "nil").") + } + userDefaults[.deviceToken] = hexEncodedToken + userDefaults[.lastDeviceTokenUpload] = now + userDefaults[.applyNormalNotification] = true }, failure: { _, error in print("[Loki] Couldn't register device token.") }) diff --git a/SignalServiceKit/src/Loki/Utilities/LKUserDefaults.swift b/SignalServiceKit/src/Loki/Utilities/LKUserDefaults.swift index 84921c642..4a21e975e 100644 --- a/SignalServiceKit/src/Loki/Utilities/LKUserDefaults.swift +++ b/SignalServiceKit/src/Loki/Utilities/LKUserDefaults.swift @@ -8,6 +8,7 @@ public enum LKUserDefaults { case hasViewedSeed /// Whether the device was unlinked as a slave device (used to notify the user on the landing screen). case wasUnlinked + case applyNormalNotification } public enum Date : Swift.String {