Add the event-handler skeleton manually
The application-delegate object
UIApplicationDelegate
manages the iOS
app life cycle using events. You can decide how to implement the life cycle of events; the steps below provide an example that is based loosely on the Apple
Breadcrumbs sample app (with differences in declarations and other key areas). Several of the sample apps included in the SDK also demonstrate the event handling lifecycle.- Specify the entitlement ID (GDApplicationID) and entitlement version (GDApplicationVersion) in theInfo.plistfile. See Using an entitlement ID and version to uniquely identify a BlackBerry Dynamics app.
- ImportGDiOS.hand implement a skeletonGDiOSDelegateprotocol. The example here relies on a boolean variable namedstarted. An alternative approach is to declare the variable in your project's.mfile.// AppDelegate.h #import <UIKit/UIKit.h> #import <GD/GDiOS.h> @interface AppDelegate : UIResponder <UIApplicationDelegate, GDiOSDelegate> { BOOL started; } @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) GDiOS *good; - (void)onAuthorized:(GDAppEvent *)anEvent; - (void)onNotAuthorized:(GDAppEvent *)anEvent; @end
- Build the app and verify that there are no warnings or errors.
- UseGDAppEventto process events. Move the application launch code fromdidFinishLaunchingWithOptionsto theGDAppEventhandler method.// AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.good = [GDiOS sharedInstance]; _good.delegate = self; started = NO; //Show the BlackBerry Authentication UI. [_good authorize]; return YES; } #pragma mark BlackBerry Dynamics Delegate Method - (void)handleEvent:(GDAppEvent *)anEvent { /* Called from _good when events occur, such as system startup. */ switch (anEvent.type) { case GDAppEventAuthorized: { [self onAuthorized:anEvent]; break; } case GDAppEventNotAuthorized: { [self onNotAuthorized:anEvent]; break; } case GDAppEventRemoteSettingsUpdate: { // handle app config changes break; } case GDAppEventPolicyUpdate: { // handle app policy changes break; } case GDAppEventServicesUpdate: { // handle services changes break; } case GDAppEventEntitlementsUpdate: { // handle entitlements changes break ; } default: NSLog(@"Unhandled Event"); break; } }
- Special-case theonNotAuthorizedevents. Verify that the app can handle authorization errors or functionality like remote wipe, a lockout, or blocking events. Implement these events in theonNotAuthorizedfunction.- (void)onNotAuthorized:(GDAppEvent *)anEvent { /* Handle the BlackBerry Libraries not authorized event. */ switch (anEvent.code) { case GDErrorActivationFailed: case GDErrorProvisioningFailed: case GDErrorPushConnectionTimeout: case GDErrorSecurityError: case GDErrorAppDenied: case GDErrorBlocked: case GDErrorWiped: case GDErrorRemoteLockout: case GDErrorPasswordChangeRequired: { // A condition has occurred denying authorization, an application may wish to log these events NSLog(@"onNotAuthorized %@", anEvent.message); break; } case GDErrorIdleLockout: { // idle lockout is benign & informational break; } default: NSAssert(false, @"Unhandled not authorized event"); break; } }
- On authorization, start the app. Initialize and start the UI with theonAuthorizedfunction. TheGDErrorNoneevent is returned by theBlackBerry Dynamics Runtimewhenever a container is opened and no error occurs.- (void)onAuthorized:(GDAppEvent *)anEvent { /* Handle the BlackBerry Libraries authorized event. */ switch (anEvent.code) { case GDErrorNone: { // started was declared in first step. if (!started) { // launch application UI here started = YES; } break; } default: NSAssert(false, @"Authorized startup with an error"); break; } }
- AddGDAssets.bundleto theCopy Bundle Resourcesbuild phase inXcode. Verify that the copy of the bundle that is distributed with the framework has been added to the project.