Difference between revisions of "SBRemoteNotificationServer"

From iPhone Development Wiki
Jump to: navigation, search
(Faking push notification)
(iOS 10 code)
Line 9: Line 9:
 
NSString *topic = @"com.yourcompany.appname";
 
NSString *topic = @"com.yourcompany.appname";
 
// topic must be an existing application identifier, or notification won't show.
 
// topic must be an existing application identifier, or notification won't show.
 +
 +
APSIncomingMessage *message = [[%c(APSIncomingMessage) alloc] initWithTopic:topic userInfo:userInfo];
  
 
if (kCFCoreFoundationVersionNumber < 800.0) { // pre iOS 7
 
if (kCFCoreFoundationVersionNumber < 800.0) { // pre iOS 7
Line 14: Line 16:
 
}  else if (kCFCoreFoundationVersionNumber < 1200) {   
 
}  else if (kCFCoreFoundationVersionNumber < 1200) {   
 
// iOS 7/8
 
// iOS 7/8
APSIncomingMessage *message = [[%c(APSIncomingMessage) alloc] initWithTopic:topic userInfo:userInfo];
 
 
[[%c(SBRemoteNotificationServer) sharedInstance] connection:nil didReceiveIncomingMessage:message];
 
[[%c(SBRemoteNotificationServer) sharedInstance] connection:nil didReceiveIncomingMessage:message];
 
[message release];
 
[message release];
} else {  
+
} else if (kCFCoreFoundationVersionNumber < 1300) {  
 
         // iOS 9  
 
         // iOS 9  
 
         UNUserNotificationServer *userNotificationServer = [%c(UNUserNotificationServer) sharedInstance];
 
         UNUserNotificationServer *userNotificationServer = [%c(UNUserNotificationServer) sharedInstance];
 
UNNotificationRegistrarConnectionListener *registrarConnectionListener = MSHookIvar<UNNotificationRegistrarConnectionListener *>(userNotificationServer, "_registrarConnectionListener");
 
UNNotificationRegistrarConnectionListener *registrarConnectionListener = MSHookIvar<UNNotificationRegistrarConnectionListener *>(userNotificationServer, "_registrarConnectionListener");
 
UNRemoteNotificationServer *remoteNotificationServer = MSHookIvar<UNRemoteNotificationServer *>(registrarConnectionListener, "_removeNotificationServer");
 
UNRemoteNotificationServer *remoteNotificationServer = MSHookIvar<UNRemoteNotificationServer *>(registrarConnectionListener, "_removeNotificationServer");
 +
        [remoteNotificationServer connection:nil didReceiveIncomingMessage:message];
 +
}
 +
else {
 +
        // iOS 10
 +
        UNSUserNotificationServer *userNotificationServer = [%c(UNSUserNotificationServer) sharedInstance];
 +
        UNSRemoteNotificationServer *remoteNotificationServer = MSHookIvar<UNSRemoteNotificationServer *>(userNotificationServer, "_remoteNotificationService");
 +
        [message setTimestamp:[NSDate date]]; // required on iOS 10
 
         [remoteNotificationServer connection:nil didReceiveIncomingMessage:message];
 
         [remoteNotificationServer connection:nil didReceiveIncomingMessage:message];
 
}
 
}

Revision as of 23:10, 12 February 2017

SBRemoteNotificationServer is a singleton class that receives Apple push notifications.

Faking push notification

Push notification may be faked locally these ways:

NSDictionary *userInfo = @{ @"aps" : @{ @"badge" : @5, @"alert" : @"hi" } };
NSString *topic = @"com.yourcompany.appname";
// topic must be an existing application identifier, or notification won't show.

APSIncomingMessage *message = [[%c(APSIncomingMessage) alloc] initWithTopic:topic userInfo:userInfo];

if (kCFCoreFoundationVersionNumber < 800.0) { // pre iOS 7
	[[%c(SBRemoteNotificationServer) sharedInstance] connection:nil didReceiveMessageForTopic:topic userInfo:userInfo];
}  else if (kCFCoreFoundationVersionNumber < 1200) {  
	// iOS 7/8
	[[%c(SBRemoteNotificationServer) sharedInstance] connection:nil didReceiveIncomingMessage:message];
	[message release];
} else if (kCFCoreFoundationVersionNumber < 1300) { 
        // iOS 9 
        UNUserNotificationServer *userNotificationServer = [%c(UNUserNotificationServer) sharedInstance];
	UNNotificationRegistrarConnectionListener *registrarConnectionListener = MSHookIvar<UNNotificationRegistrarConnectionListener *>(userNotificationServer, "_registrarConnectionListener");
	UNRemoteNotificationServer *remoteNotificationServer = MSHookIvar<UNRemoteNotificationServer *>(registrarConnectionListener, "_removeNotificationServer");
        [remoteNotificationServer connection:nil didReceiveIncomingMessage:message];
}
else {
        // iOS 10
        UNSUserNotificationServer *userNotificationServer = [%c(UNSUserNotificationServer) sharedInstance];
        UNSRemoteNotificationServer *remoteNotificationServer = MSHookIvar<UNSRemoteNotificationServer *>(userNotificationServer, "_remoteNotificationService"); 
        [message setTimestamp:[NSDate date]]; // required on iOS 10
        [remoteNotificationServer connection:nil didReceiveIncomingMessage:message];
}

References