Guides
The SDK is identity, signing, and notification routing. Your app is the UI, the call stack, and the Allow dialog.
A user talks as an email they verify, or as a new identity they install. The name you send to is a string such as alice.arnacon.global. A phone number is not required to call or message.
| Term | What it is |
|---|---|
| Main coordinates | The install’s wallet address. iOS getMainCoordinates(). Android getPublicKey(). |
| Canonical name | Always includes .global. Used for lookups, routing, and notifications. Example: alice.arnacon.global. |
| Label | What the user sees. Email, or a short name without .global. |
| Encryption password | iOS gpsCoordinates. Android AppKeyManager.getAppKey. Encrypts local secrets. Not GPS. Not a number. |
Resolve a name with getENSOwner. Sign payloads with signMessage / getXData + getXSign. Never log the mnemonic or the encryption password.
The SDK calls an identity on the device a product. Installing one writes a name, a label, a state, and the service-provider metadata used later to route notifications.
installProduct is how a new identity lands on the device.getProductsList / getIdentities.The store apps also speak WhatsApp as a host feature. That is not this SDK and not required to call an Arnacon identity.
From NotificationType in the iOS SDK. Android’s JAR uses the same integers.
| Case | Raw | Use |
|---|---|---|
call | 0 | Incoming-call invite. This is what rings. |
message | 1 | Wake / chat notification. Wrapper sendFCMMessage. |
fetch | 2 | Pull inbound payloads. Not a user-visible chat send. |
fallback | 3 | Deliver a chat body after the primary WebRTC path failed. |
realtimeSignal | 4 | SDP, ICE, cancel, reject, end. Must not present as a new incoming call. |
deliveryStatus | 5 | Delivery / read / ack. Not user-visible chat content. |
A notification plan is a sequence of steps the service-provider contract returns. The last HTTP step is not fired until you execute.
prepareNotification builds the plan and returns it.executeNotification fires the last step.sendNotification (iOS) is prepare + execute.sendFCMMessage / sendCallNotification / sendRealtimeSignal are the same two steps with a fixed type.Use the plan path when you need to inspect or fail before send. Use the convenience method when you do not.
Routing is sender-first unless the sender’s service metadata sets checkRemote.
checkRemote = false (or missing): the sender’s notification contract builds the plan. The target name rides in the payload. The recipient does not need an on-chain address for this path.checkRemote = true: resolve the recipient with getENSOwner, then use the recipient’s contract. No address means the send fails.You do not implement Sapphire, JWT minting, or FCM OAuth. The SDK does. If the plan fails it may retry fresh and then fall back to the GCP notification center. Treat that as infrastructure, not as something to re-code in the host app.
If you skip these, the happy path compiles and still cannot ship.
installProductinstallProduct without an explicit AllowNext