Search code examples
iosparse-platformparse-serverios-extensionsios8-share-extension

How to share Parse login session with iOS extension?


When writing an iOS extension for an app, is it possible to share the app's current Parse login session with the iOS extension?

iOS extensions are bundled with iOS apps but run in separate containers. So when the user logged in on the app, the extension cannot access that Parse instance. If the extension logged in again, it would create an additional login session for the user.

However the extension can share a common data container with the app. So I wonder if it is possible to store the PFSession.sessionToken in the shared container and let the extension communicate with Parse Server based on that existing session without having to login?


Solution

  • There are two possible solutions:

    A) The elegant approach

    Enable local data sharing which shares persistent data between the main iOS app and its extensions.

    // Enable data sharing in main app.
    Parse.enableDataSharingWithApplicationGroupIdentifier("...")
    
    // Enable data sharing in app extensions.
    Parse.enableDataSharingWithApplicationGroupIdentifier("...", containingApplicaiton: "...")
    

    Local data sharing in Parse SDKs allows you do share persistent local data between your main application and extensions that it contains, including Keyboard, Share/Today/Photo/Action extensions and Document Providers.

    As described in the docs.

    B) The manual approach

    After login in the app, store the Parse session token PFUser.current().sessionToken in an ecrypted, shared data container.

    The extension can then access the session token and continue the session with PFUser.become(sessionToken:).