Search

Page tree
Skip to end of metadata
Go to start of metadata

On this Page:

iOS Framework

Click to reach documentation.


General Information

Apple Push Notification Server (APNS) is a central server where all the iOS devices are connected at any given time. In order to send the message to the target device and application, a token is generated for each device-application pair and this token is sent to APNS along with the message.



You need to send the following information to RMC for APNS communication:

  • Token List



APNS Methods

APNS works in two modes, Sandbox and Production:

  • Sandbox certificate is used for applications that are not submitted to the Appstore and generally when the app is attached to the debugger (USB cable connection to XCode).
  • Production certificate is used for applications distributed through ad-hoc and Testflight (closed distribution) and for applications in the appstore.

After you imported the SDK into your project by adding the related files, you can integrate the SDK using the following steps.


The following method should be used for registering the application into the APNS system:


Objective-C
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
        (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
Swift
In AppDelegate file of your project you should edit didFinishLaunchingWithOptions




func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self
        
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
       
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }
}



After that point, the user has to accept to receive push messages. If the user accepts and the device is successfully registered to the APNS, the following method is called in AppDelegate:

Objective-C
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken");
    [[EuroManager sharedManager:@"AppcentIOSTest1"] registerToken:deviceToken];
}
Swift
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        EuroManager.sharedManager("AppcentIOSTest1").registerToken(deviceToken)
    }


In the APPLICATION:DIDREGISTERFORREMOTENOTIFICATIONSWITHDEVICETOKEN: method, deviceToken variable is the generated token by APNS. After receiving this token, registerToken method is called in EuroManager. This token value must be recorded to the RMC system in order to send messages. In the example, APPCENTIOSTEST1 value is a code value that is given by RMC for your application.

EuroManager instance is activated as shown below:

Objective-C
[[EuroManager sharedManager:@"AppcentIOSTest1" setUserKey: @"egemen@visilabs.com"];
[[EuroManager sharedManager:@"AppcentIOSTest1"] setUserEmail: @"egemen@visilabs.com"];
[[EuroManager sharedManager:@"AppcentIOSTest1"] synchronize];

Swift
let euroInstance: EuroManager = EuroManager.sharedManager("AppcentIOSTest1")
euroInstance.setUserEmail("egemen@visilabs.com")
euroInstance.setUserEmail("egemen@visilabs.com")
euroInstance("AppcentIOSTest1").synchronize()



If the additional parameters of the user are known, they can be added as shown below:

Objective-C
[[EuroManager sharedManager:@"AppcentIOSTest1"] userEmail: @"egemen@visilabs.com"];
[[EuroManager sharedManager:@"AppcentIOSTest1"] setUserKey: @"egemen@visilabs.com"];
[[EuroManager sharedManager:@"AppcentIOSTest1"] synchronize];

Swift
let euroInstance: EuroManager = EuroManager.sharedManager("AppcentIOSTest1")
euroInstance.setUserEmail("egemen@visilabs.com")
euroInstance.setUserKey("egemen@visilabs.com")
euroInstance.synchronize()

In any step, if you add a new parameter and want to send it to the RMC server, you should call the "synchronize" method:


Use the following method when the user logs in to your mobile app:

Objective-C
[[EuroManager sharedManager:@"AppcentIOSTest1"] synchronize];
Swift
EuroManager.sharedManager("AppcentIOSTest1").synchronize()


If a push notification arrives, application:didReceiveRemoteNotification method is invoked. The incoming message content should be given to the handlePush method in the EuroManager instance.
Objective-C
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [[EuroManager sharedManager:@"AppcentIOSTest1"] handlePush:userInfo];
}
Swift
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]){
        EuroManager.sharedManager("AppcentIOSTest1").handlePush(userInfo)
}

If you are using iOS 8 or later version, the following method should be called:


Objective-C
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    [[EuroManager sharedManager:@"AppcentIOSTest1"] handlePush:userInfo];
}
Swift
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        EuroManager.sharedManager("AppcentIOSTest1").handlePush(userInfo, completionHandler: completionHandler)
}


When an interactive push is sent, the information of which button is clicked by the user should be transmitted to RMC. For this application: HANDLEACTIONWITHIDENTIFIER:FORREMOTENOTIFICATION:COMPLETIONHANDLER: method in the APPDELEGATE is called as shown below:


Objective-C
- (void) application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler 
{ 
	[[EuroManager sharedManager:@"AppcentIOSTest1"] handleInteractiveAction:identifier userInfo:userInfo];
}



Swift
optional func application(_ application: UIApplication,  handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [AnyHashable : Any],  completionHandler: :(void (^)(void))completionHandler
{ 
 	EuroManager.sharedManager("AppcentIOSTest1").handleInteractiveAction:identifier userInfo:userInfo];
}



Variables in the Message class:

VariableDescription
messageContentMessage
URLAn optional URL
paramsCustom parameters
pushTypePush Type
altURLAlternate URL
mediaUrlImage and Video content URL
cIdCampaign id
soundSound name





Parent Topic: Push SDK

- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken");
    [[EuroManager sharedManager:@"AppcentIOSTest1"] registerToken:deviceToken];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    NSLog(@"User Info Description: %@",userInfo.debugDescription);


    [[EuroManager sharedManager:@"VisilabsIOSDemo"] handlePush:userInfo];

}


  • No labels