During the Pulsate Manager instantiation you can declare if you want remote notifications or location authorization prompts to be shown when the startPulsateSession method is called. You can delay these prompts by passing NO and using startLocation, startRemoteNotifications at your convenience.

PULPulsateManager* pulsateManager = [PULPulsateFactory getInstanceWithAuthorizationData:authData andLocationEnabled:NO withRemoteNotificationsEnabled:NO withLaunchOptions:launchOptions error:&error];

[pulsateManager startPulsateSession:^(BOOL success, NSError* error) {}];

	// The session lifecycle has started, but without remote notifications 	and location

	//... 

	// At the time of your convenience you can start the modules you want and present the authorization prompts to the user.

[pulsateManager startLocation];

// You can also use the startRemoteNotificationsWithSettings: method if you want to pass custom UIUserNotificationSettings settings 
[pulsateManager startRemoteNotifications];
let pulsateManager = try PULPulsateFactory.getInstanceWith(authData, withLocationEnabled: false, withPushEnabled: false, withLaunchOptions: launchOptions, withPulsateAppDelegate: true);
             
pulsateManager.startPulsateSession()

// The session lifecycle has started, but without remote notifications 	and location
//... 
// At the time of your convenience you can start the modules you want and present the authorization prompts to the user.

pulsateManager.startLocation()
// You can also use the startRemoteNotificationsWithSettings: method if you want to pass custom UIUserNotificationSettings settings 
pulsateManager.startRemoteNotifications()