Notch Pay Mobile SDKs

Notch Pay provides native SDKs for iOS and Android to help you integrate payment functionality into your mobile applications.

Android SDK

The Notch Pay Android SDK allows you to accept payments in your Android applications with a native checkout experience.

Installation

Add the Notch Pay SDK to your app’s build.gradle file:

dependencies {
    implementation 'co.notchpay:notchpay-android:1.2.0'
}

Initialization

Initialize the SDK in your Application class or main activity:

// In your Application class or main activity
import co.notchpay.android.NotchPay;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        
        // Initialize with your public key
        NotchPay.initialize("YOUR_PUBLIC_KEY");
        
        // For test mode
        NotchPay.setTestMode(true); // Set to false for production
    }
}

Creating a Payment

To create a payment, you’ll need to make a server-side API call to initialize the payment, then use the SDK to complete it:

// First, create a payment on your server and get the payment ID
String paymentId = "pay_123456789"; // Get this from your server

// Then, launch the checkout
NotchPay.checkout(
    this, // Activity context
    paymentId,
    new NotchPayCheckoutCallback() {
        @Override
        public void onSuccess(NotchPayTransaction transaction) {
            // Payment successful
            String reference = transaction.getReference();
            String status = transaction.getStatus();
            double amount = transaction.getAmount();
            String currency = transaction.getCurrency();
            
            // Update your UI or navigate to a success screen
            showSuccessScreen(reference, amount, currency);
        }
        
        @Override
        public void onError(NotchPayException error) {
            // Payment failed
            String errorMessage = error.getMessage();
            
            // Show error message to user
            showErrorMessage(errorMessage);
        }
        
        @Override
        public void onCancel() {
            // User canceled the payment
            // Handle cancellation
            showCancellationMessage();
        }
    }
);

Customizing the Checkout UI

You can customize the appearance of the checkout UI:

NotchPayCheckoutConfig config = new NotchPayCheckoutConfig.Builder()
    .setTitle("Payment for Order #123")
    .setDescription("Your order from Example Store")
    .setLogoUrl("https://example.com/logo.png")
    .setPrimaryColor("#4F46E5")
    .setShowReceiptPage(true)
    .build();

NotchPay.checkout(this, paymentId, config, callback);

To handle callbacks from the payment flow, you need to set up deep linking in your app:

  1. Add the following to your AndroidManifest.xml:
<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    
    <!-- Deep link handling -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="yourapp"
            android:host="payment" />
    </intent-filter>
</activity>
  1. Handle the deep link in your activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // Handle deep link
    Intent intent = getIntent();
    if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        Uri uri = intent.getData();
        if (uri != null) {
            String reference = uri.getQueryParameter("reference");
            if (reference != null) {
                // Verify payment status with your server
                verifyPayment(reference);
            }
        }
    }
}

Complete Example

Here’s a complete example of integrating the Notch Pay Android SDK:

public class PaymentActivity extends AppCompatActivity {
    private Button payButton;
    private TextView statusText;
    private ProgressBar progressBar;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_payment);
        
        payButton = findViewById(R.id.pay_button);
        statusText = findViewById(R.id.status_text);
        progressBar = findViewById(R.id.progress_bar);
        
        payButton.setOnClickListener(v -> initiatePayment());
    }
    
    private void initiatePayment() {
        progressBar.setVisibility(View.VISIBLE);
        statusText.setText("Creating payment...");
        
        // Make API call to your server to create a payment
        ApiClient.createPayment(
            5000, // Amount
            "XAF", // Currency
            "customer@example.com", // Customer email
            new ApiCallback<PaymentResponse>() {
                @Override
                public void onSuccess(PaymentResponse response) {
                    progressBar.setVisibility(View.GONE);
                    launchCheckout(response.getPaymentId());
                }
                
                @Override
                public void onError(Exception e) {
                    progressBar.setVisibility(View.GONE);
                    statusText.setText("Error: " + e.getMessage());
                }
            }
        );
    }
    
    private void launchCheckout(String paymentId) {
        NotchPayCheckoutConfig config = new NotchPayCheckoutConfig.Builder()
            .setTitle("Payment for Order #123")
            .setDescription("Your order from Example Store")
            .setPrimaryColor("#4F46E5")
            .build();
            
        NotchPay.checkout(
            this,
            paymentId,
            config,
            new NotchPayCheckoutCallback() {
                @Override
                public void onSuccess(NotchPayTransaction transaction) {
                    statusText.setText("Payment successful!\nReference: " + transaction.getReference());
                }
                
                @Override
                public void onError(NotchPayException error) {
                    statusText.setText("Payment failed: " + error.getMessage());
                }
                
                @Override
                public void onCancel() {
                    statusText.setText("Payment canceled");
                }
            }
        );
    }
    
    private void verifyPayment(String reference) {
        progressBar.setVisibility(View.VISIBLE);
        statusText.setText("Verifying payment...");
        
        // Make API call to your server to verify the payment
        ApiClient.verifyPayment(
            reference,
            new ApiCallback<PaymentVerificationResponse>() {
                @Override
                public void onSuccess(PaymentVerificationResponse response) {
                    progressBar.setVisibility(View.GONE);
                    if (response.isSuccessful()) {
                        statusText.setText("Payment verified!\nAmount: " + response.getAmount() + " " + response.getCurrency());
                    } else {
                        statusText.setText("Payment verification failed: " + response.getMessage());
                    }
                }
                
                @Override
                public void onError(Exception e) {
                    progressBar.setVisibility(View.GONE);
                    statusText.setText("Error verifying payment: " + e.getMessage());
                }
            }
        );
    }
}