Merge PR #266: Try using the UserNotification framework

This commit is contained in:
Jenkins nymea 2019-11-14 17:29:31 +01:00
commit 50af4c3d3d
2 changed files with 35 additions and 6 deletions

View File

@ -102,6 +102,8 @@ ios: {
OBJECTIVE_SOURCES += $$PWD/../packaging/ios/pushnotifications.mm \ OBJECTIVE_SOURCES += $$PWD/../packaging/ios/pushnotifications.mm \
$$PWD/../packaging/ios/platformhelperios.mm $$PWD/../packaging/ios/platformhelperios.mm
LIBS += -framework "UserNotifications"
QMAKE_TARGET_BUNDLE_PREFIX = io.guh QMAKE_TARGET_BUNDLE_PREFIX = io.guh
QMAKE_BUNDLE = nymeaApp QMAKE_BUNDLE = nymeaApp
# Configure generated xcode project to have our bundle id # Configure generated xcode project to have our bundle id

View File

@ -1,10 +1,13 @@
#import "UIKit/UIKit.h" #import "UIKit/UIKit.h"
#import <UserNotifications/UserNotifications.h>
// Include our C++ class // Include our C++ class
#include "pushnotifications.h" #include "pushnotifications.h"
#include <QDebug>
// This is hidden, so we declare it here to hook into it // This is hidden, so we declare it here to hook into it
@interface QIOSApplicationDelegate @interface QIOSApplicationDelegate: UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>
@end @end
//add a category to QIOSApplicationDelegate //add a category to QIOSApplicationDelegate
@ -12,31 +15,55 @@
// No need to declare the methods here, since were overriding existing ones // No need to declare the methods here, since were overriding existing ones
@end @end
@implementation QIOSApplicationDelegate (APNSApplicationDelegate) @implementation QIOSApplicationDelegate (APNSApplicationDelegate)
- (BOOL)application:(UIApplication *)application - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Register to receive notifications from the system // Register to receive notifications from the system
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
[application registerForRemoteNotifications]; NSLog(@"registering for remote notifications");
NSLog(@"registered for remote notifications"); qDebug() << "Registering for remote notifications";
return YES; return YES;
} }
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken); NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken);
const unsigned *tokenBytes = (const unsigned*)[deviceToken bytes]; const unsigned *tokenBytes = (const unsigned*)[deviceToken bytes];
NSString *tokenStr = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", NSString *tokenStr = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
qDebug() << "Registering for remote notifications";
qDebug() << "Token description:" << QString::fromNSString(deviceToken.description);
qDebug() << "Parsed token:" << QString::fromNSString(tokenStr);
PushNotifications::instance()->setAPNSRegistrationToken(QString::fromNSString(tokenStr)); PushNotifications::instance()->setAPNSRegistrationToken(QString::fromNSString(tokenStr));
} }
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Did Fail to Register for Remote Notifications"); NSLog(@"Did Fail to Register for Remote Notifications");
NSLog(@"%@, %@", error, error.localizedDescription); NSLog(@"%@, %@", error, error.localizedDescription);
qWarning() << "Failed to register for notifications:" << QString::fromNSString(error.localizedDescription);
}
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
NSLog(@"User Info : %@",notification.request.content.userInfo);
qDebug() << "willPresentNotification called!";
completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
NSLog(@"User Info : %@",response.notification.request.content.userInfo);
qDebug() << "received notification response!";
completionHandler();
} }
@end @end