Back to Blog
Technical

Integrating GemiWall SDK: A Step-by-Step Technical Guide

Get your offerwall up and running in under 5 minutes. Complete technical documentation with code examples for iOS, Android, and Unity integration.

E

Emma Watson

Developer Relations Lead

12 min read

Integrating GemiWall SDK: A Step-by-Step Technical Guide

Get GemiWall integrated into your app quickly with this comprehensive technical guide.

Prerequisites

  • Active GemiAd publisher account
  • API credentials (App ID and Secret Key)
  • Minimum SDK requirements:
- iOS: 12.0+

- Android: API 21+

- Unity: 2019.4+

Installation

iOS (CocoaPods)

Add to Podfile

pod 'GemiWallSDK', '~> 2.0'

Install

pod install

Android (Gradle)

// Add to build.gradle (app level)

dependencies {

implementation 'com.gemiad:gemiwall:2.0.0'

}

Unity

  • Download Unity package from dashboard
  • Import into Unity project
  • Configure settings in GemiWall prefab

Basic Configuration

iOS (Swift)

import GemiWallSDK

func application(_ application: UIApplication,

didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

GemiWall.configure(

appId: "YOUR_APP_ID",

secretKey: "YOUR_SECRET_KEY"

)

return true

}

Android (Kotlin)

import com.gemiad.gemiwall.GemiWall

class MyApplication : Application() {

override fun onCreate() {

super.onCreate()

GemiWall.configure(

context = this,

appId = "YOUR_APP_ID",

secretKey = "YOUR_SECRET_KEY"

)

}

}

Displaying the Offerwall

iOS

GemiWall.show(

from: viewController,

userId: "user123",

completion: { result in

switch result {

case .success:

print("Offerwall displayed")

case .failure(let error):

print("Error: \(error)")

}

}

)

Android

GemiWall.show(

activity = this,

userId = "user123",

listener = object : GemiWallListener {

override fun onShow() {

Log.d("GemiWall", "Displayed")

}

override fun onError(error: GemiWallError) {

Log.e("GemiWall", "Error: $error")

}

}

)

Reward Callbacks

Server-to-Server (Recommended)

Set up a webhook endpoint to receive reward notifications:

{

"user_id": "user123",

"offer_id": "offer456",

"reward_amount": 100,

"currency": "coins",

"timestamp": 1640000000,

"signature": "abc123..."

}

Client-Side

GemiWall.setRewardListener { reward in

print("User earned: \(reward.amount) \(reward.currency)")

// Credit user account

}

Advanced Features

Custom Styling

let config = GemiWallConfig()

config.primaryColor = UIColor.purple

config.accentColor = UIColor.pink

config.navigationBarStyle = .dark

GemiWall.setConfig(config)

Analytics Events

GemiWall.setAnalyticsListener(object : AnalyticsListener {

override fun onOfferClick(offerId: String) {

// Track offer engagement

}

override fun onOfferComplete(offerId: String) {

// Track conversions

}

})

Testing

  • Use test mode during development:
   GemiWall.setTestMode(true)

  • Verify test rewards appear in dashboard

  • Test all flows before production release

Best Practices

Implement S2S callbacks for reward verification

Handle errors gracefully

Cache user data appropriately

Test thoroughly before launch

Monitor SDK performance

Troubleshooting

Common Issues

Offerwall not showing:

  • Verify API credentials
  • Check network connectivity
  • Ensure user ID is set

Rewards not credited:

  • Confirm S2S webhook is configured
  • Validate signature verification
  • Check server logs

Support

Need help? Our developer support team is here:

Start monetizing in minutes with GemiWall!

Tagged in:

SDKIntegrationDeveloper GuideTutorial

About the Author

E

Emma Watson

Developer Relations Lead

Emma Watson is a thought leader in the mobile advertising industry, helping businesses maximize their performance through innovative strategies and data-driven insights. With years of experience in AdTech, Emma shares actionable tips and industry expertise.

Ready to Maximize Your Revenue?

Join thousands of publishers and advertisers who trust GemiAd to grow their business