Library Reference
Use the NamiECR SDK to integrate payment functionality into iOS and iPadOS applications. The SDK supports native Swift and Objective‑C, enabling developers to initialize connections, send transaction requests, and process responses with Nami terminals.
For integration steps, refer to iOS ECR Integration.
Prerequisites
- Xcode 14+
- Swift 5.7+ or Objective-C
- iOS 13.0 or later
- Nami terminal connected to Wi-Fi
- Proper app entitlements and permissions configured for networking (App Transport Security in
Info.plist)
Library Import
Add the NamiECR SDK framework to your project and import it in your code.
Swift
import NamiECRSDK
Objective-C
@import NamiECRSDK;
Core Components
- ECRSDK.shared – Singleton for managing SDK operations
- connectTCP() – Establish a direct TCP/IP connection to the terminal
- scanDevice() – Discover available terminals automatically
- onSelectDevice() – Select and connect to a discovered terminal
- disconnectTCP() – Disconnect from the terminal
- doTransaction() – Execute a transaction using a request object
- PurchaseRequest() – Create a purchase transaction request
- PurchaseWithNaqdRequest() – Create a purchase with Naqd transaction request
- RefundRequest() – Create a refund transaction request
- AuthorizationRequest() – Create an authorization transaction request
- AdviseRequest() – Create an advice transaction request
- AuthExtensionRequest() – Create an authorization extension request
- AuthVoidRequest() – Create an authorization void transaction request
- CashAdvanceRequest() – Create a cash advance transaction request
- DuplicateRequest() – Create a duplicate transaction request
- ReversalRequest() – Create a reversal transaction request
- ReconcilationRequest() – Create a reconciliation transaction request
Permissions (Info.plist Example)
Add the following entries to your Info.plist for network access.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Integration Example
Swift
// Connect via TCP/IP
ECRSDK.shared.connectTCP(ip: "192.168.0.102", port: 8888) { status, result in
DispatchQueue.main.async {
if status {
print("Connected successfully")
} else {
print("Connection failed")
}
}
}
// Configure CRN and terminal printer
ECRSDK.shared.cashRegisterNumber = "12345678"
ECRSDK.shared.enableTerminalPrinter = true
// Create a purchase transaction request
let transactionRequest = PurchaseRequest(amount: "000000001000")
// Execute transaction
ECRSDK.shared.doTransaction(request: transactionRequest) { status, response in
DispatchQueue.main.async {
if status {
print("Transaction approved")
} else {
print("Transaction failed")
}
}
}
Response Handling Example
Swift
private func handleTransactionResponse(
status: Bool,
response: String,
selectedTransactionType: SupportedTransactions
) {
guard status else {
if !ECRSDK.shared.isDeviceConnected() {
updateConnectivityStatus()
}
showAlert(message: "Transaction failed")
return
}
let components = transactionResponse.responseBody.components(separatedBy: ";")
if transactionResponse.responseBody.caseInsensitiveCompare("Transaction Not Allowed") == .orderedSame {
displayResponseReceived(
for: selectedTransactionType,
with: [transactionResponse.responseBody]
)
} else if components.count > 2 {
let trimmed = Array(components.dropFirst().dropLast())
displayResponseReceived(
for: selectedTransactionType,
with: trimmed
)
} else {
displayResponseReceived(
for: selectedTransactionType,
with: [transactionResponse.responseBody]
)
}
}
Error Handling
- Connection failure → Display an error message and allow the user to retry.
- Scan failure → Display an alert and restart device discovery if required.
- Invalid CRN → Ensure the CRN is an 8-digit numeric value before initiating a transaction.
- Timeout → Retry the operation or prompt the user to reconnect.
- Invalid request data → Validate all required transaction fields before calling
doTransaction().
Configuration
Configure the following properties before initiating a transaction:
- Cash Register Number (CRN)
- Terminal printer preference (
true= Enable,false= Disable)
No external configuration files are required.
Runtime Behavior
- The SDK supports TCP/IP and automatic terminal discovery.
- Connect to the terminal before initiating a transaction.
- Configure the CRN and terminal printer preference.
- Create the appropriate transaction request object.
- Execute the transaction using
doTransaction(request:). - Process the transaction response returned by the SDK.
- Disconnect from the terminal after transaction completion.
Transaction Flow
Initialize SDK → Configure POS Terminal → Connect Device (TCP/IP or Scan) → Register (txnType 17) → Start Session (txnType 18) → Create Transaction Request → Execute Transaction → Receive Response → Process Response → Disconnect
Updated about 2 months ago
