Android SDK
Native Kotlin SDK for creating blockchain-verified .facti files on Android
Installation
Gradle
Add to your build.gradle:
dependencies {
implementation 'io.blockfact:sdk:2.0.0'
}Quick Start
import io.blockfact.sdk.BlockFact
val blockFact = BlockFact(context)
// Create wallet
val wallet = blockFact.createWallet()
println("Wallet: ${wallet.address}")
// Register content
val result = blockFact.registerContent(
image = bitmap,
latitude = location.latitude,
longitude = location.longitude
)
println("Registered: ${result.factiUrl}")API Reference
BlockFact
createWallet()
suspend fun createWallet(): WalletCreates a new Starknet wallet. Stored securely in EncryptedSharedPreferences.
getWallet()
fun getWallet(): Wallet?Retrieves existing wallet.
registerContent()
suspend fun registerContent(
image: Bitmap,
latitude: Double,
longitude: Double,
metadata: Map<String, Any> = emptyMap()
): RegistrationResultRegisters content on blockchain and returns .facti URL.
verifyContent()
suspend fun verifyContent(factiUrl: String): VerificationResultVerifies a .facti file against blockchain.
Complete Example
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.lifecycle.lifecycleScope
import io.blockfact.sdk.BlockFact
import kotlinx.coroutines.launch
class CameraActivity : ComponentActivity() {
private lateinit var blockFact: BlockFact
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
blockFact = BlockFact(this)
lifecycleScope.launch {
if (blockFact.getWallet() == null) {
blockFact.createWallet()
}
}
}
private fun registerPhoto(bitmap: Bitmap, location: Location) {
lifecycleScope.launch {
try {
val result = blockFact.registerContent(
image = bitmap,
latitude = location.latitude,
longitude = location.longitude
)
Toast.makeText(
this@CameraActivity,
"✅ Registered: ${result.txHash}",
Toast.LENGTH_LONG
).show()
} catch (e: Exception) {
Toast.makeText(
this@CameraActivity,
"Error: ${e.message}",
Toast.LENGTH_LONG
).show()
}
}
}
}Models
Wallet
data class Wallet(
val address: String,
val publicKey: String,
val privateKey: String
)RegistrationResult
data class RegistrationResult(
val factiUrl: String,
val factiCid: String,
val txHash: String,
val sessionId: String
)VerificationResult
data class VerificationResult(
val valid: Boolean,
val metadata: Map<String, Any>,
val blockNumber: Int,
val timestamp: String
)Permissions
Add to AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />Requirements
- • Android 5.0+ (API 21+)
- • Kotlin 1.8+
- • AndroidX
ProGuard
If using ProGuard, add:
-keep class io.blockfact.sdk.** { *; }
-keepclassmembers class io.blockfact.sdk.** { *; }🎉 100% Free to Use
No API keys, no usage limits, no fees. Free to use for any purpose.