Jake

iOS SDK

Add Jake Messenger to UIKit and SwiftUI apps

iOS SDK

TL;DR: Add the Swift package. Configure once. Authenticate from your backend. Call Jake.present(). iOS 15+.

If you're migrating from Intercom, use the migration guide instead.

1. Install

File → Add Package Dependencies:

https://github.com/EthanQuarry/jake-ios.git

Add JakeSDK to your app target.

2. Configure

import JakeSDK

// In app startup:
Jake.configure(
    workspaceId: "YOUR_WORKSPACE_ID",
    publicKey: "YOUR_PUBLIC_KEY",
    messengerURL: URL(string: "https://widget.tryjake.ai/messenger")!
)

3. Authenticate

Your backend creates the token (same endpoint as the web widget):

let response = try await api.createJakeUserToken()
try await Jake.authenticate(userId: response.userId, token: response.token)

Session stored in Keychain. Never put secrets in the app.

4. Present

Button("Contact support") {
    Jake.present()
}

UIKit: Jake.present(from: self)

5. Logout

Jake.logout() // always call before authenticating a different user

Unread and errors

Jake.delegate = self // implement JakeDelegate

func jakeDidUpdateUnreadCount(_ count: Int) { /* badge */ }
func jakeAuthenticationDidExpire() { /* refresh token */ }

Events and attributes

Jake.track("subscription_upgraded", properties: ["plan": .string("pro")])
Jake.setUserAttributes(["company": .string("Acme")])

Push

Jake.setPushToken(deviceToken) // after registering for notifications

Token registration alone doesn't prove push works — verify on a real device.

Troubleshooting

  • "Jake has not been configured" — call configure before anything else
  • "Authenticate a user before presenting" — wait for authenticate to complete
  • Blank screen — check network, workspace values, and Messenger URL
  • Auth expires mid-session — SDK dismisses and calls jakeAuthenticationDidExpire

Next: Go-live checklist →

On this page