📤 Share

Moduł udostępniania z analityką i systemem referral.

Przegląd

Moduł Share zapewnia rozszerzone funkcje udostępniania:

Podstawowe użycie

Udostępnianie tekstu

ADict.Share.text(context, "Sprawdź tę aplikację!")

// Z tytułem choosera
ADict.Share.text(
    context = this,
    text = "Najlepsza gra na świecie!",
    chooserTitle = "Podziel się z przyjaciółmi"
)

Udostępnianie URL

ADict.Share.url(
    context = this,
    url = "https://example.com/article/123",
    text = "Ciekawy artykuł!"
)

Udostępnianie aplikacji

// Automatycznie generuje link do Play Store
ADict.Share.app(context)

// Z własnym tekstem
ADict.Share.app(
    context = this,
    customText = "Polecam tę grę! 🎮"
)

Zaawansowane udostępnianie

Builder pattern

ADict.Share.share(context) {
    text("Polecam tę aplikację!")
    url("https://play.google.com/store/apps/details?id=com.example.app")
    subject("Świetna aplikacja")
    chooserTitle("Udostępnij przez...")
    trackAs("app_recommendation")  // ID do śledzenia
    onShared { success ->
        if (success) {
            analytics.log("share_completed")
        }
    }
}

Udostępnianie obrazu

// Z Bitmap
val bitmap = getBitmap()
ADict.Share.image(
    context = this,
    bitmap = bitmap,
    text = "Zobacz moje zdjęcie!"
)

// Z URI (builder)
ADict.Share.share(context) {
    image(imageUri)
    text("Mój najnowszy wynik!")
    trackAs("score_share")
}

Udostępnianie pliku

val file = File(cacheDir, "document.pdf")
ADict.Share.file(
    context = this,
    file = file,
    mimeType = "application/pdf",
    text = "Przesyłam dokument"
)

System Referral

Konfiguracja

ADict.Share.configure(
    referralBaseUrl = "https://myapp.com/invite",
    referralParamName = "ref"  // domyślnie "ref"
)

Generowanie linku referral

// Generuj link dla użytkownika
val userId = "user_abc123"
val referralLink = ADict.Share.createReferralLink(userId)
// Wynik: https://myapp.com/invite?ref=user_abc123

// Udostępnij link referral
ADict.Share.shareReferral(
    context = this,
    referrerId = userId,
    customText = "Dołącz do nas i otrzymaj 10 monet!"
)

Obsługa przychodzącego referral

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Obsłuż deep link z referral
        ADict.Share.handleReferral(intent) { referrerId ->
            if (referrerId != null) {
                // Ktoś przyszedł z polecenia!
                grantReferralBonus(referrerId)
                showWelcomeMessage("Zaproszony przez $referrerId")
            }
        }
    }

    // Sprawdź zapisanego referrera później
    fun checkReferrer() {
        val referrer = ADict.Share.getSavedReferrer()
        referrer?.let {
            processReferral(it)
            ADict.Share.clearReferrer() // Po wykorzystaniu
        }
    }
}

Statystyki

// Liczba udostępnień dla konkretnego trackingId
val appShares = ADict.Share.getShareCount("app_recommendation")

// Całkowita liczba udostępnień
val total = ADict.Share.getTotalShareCount()

// Wszystkie statystyki
val allStats = ADict.Share.getAllStats()
allStats.forEach { (trackingId, count) ->
    Log.d("Share", "$trackingId: $count udostępnień")
}

Eventy i Callbacks

// Globalny callback na eventy
ADict.Share.addCallback { event ->
    when (event) {
        is ShareEvent.Started -> {
            analytics.log("share_started", event.type)
        }
        is ShareEvent.Completed -> {
            analytics.log("share_completed", event.type)
        }
        is ShareEvent.ReferralGenerated -> {
            analytics.log("referral_created", event.referrerId)
        }
        is ShareEvent.ReferralReceived -> {
            analytics.log("referral_received", event.referrerId)
        }
    }
}

Udostępnianie do konkretnych aplikacji

// Sprawdź czy share jest możliwy
if (ADict.Share.canShare(context)) {
    // OK
}

// Udostępnij bezpośrednio do konkretnej aplikacji
ADict.Share.shareToApp(
    context = this,
    packageName = Share.Apps.WHATSAPP,
    text = "Wiadomość na WhatsApp"
)

// Dostępne stałe aplikacji
Share.Apps.WHATSAPP    // "com.whatsapp"
Share.Apps.TELEGRAM    // "org.telegram.messenger"
Share.Apps.FACEBOOK    // "com.facebook.katana"
Share.Apps.TWITTER     // "com.twitter.android"
Share.Apps.INSTAGRAM   // "com.instagram.android"
Share.Apps.MESSENGER   // "com.facebook.orca"
Share.Apps.GMAIL       // "com.google.android.gm"

Przykład: Pełna integracja

class ShareActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Konfiguracja referral
        ADict.Share.configure(
            referralBaseUrl = "https://myapp.link/invite"
        )

        // Callback na statystyki
        ADict.Share.addCallback { event ->
            when (event) {
                is ShareEvent.Completed -> {
                    // Nagroda za udostępnienie
                    if (event.trackingId == "first_share") {
                        grantShareBonus()
                    }
                }
            }
        }

        // Obsłuż przychodzący referral
        ADict.Share.handleReferral(intent) { referrerId ->
            referrerId?.let { processReferral(it) }
        }
    }

    fun onShareScoreClick(score: Int) {
        ADict.Share.share(this) {
            text("Zdobyłem $score punktów w grze! 🏆")
            url("https://play.google.com/store/apps/details?id=$packageName")
            trackAs("score_share")
            onShared { success ->
                if (success) {
                    showConfetti()
                }
            }
        }
    }

    fun onInviteFriendsClick() {
        val userId = getCurrentUserId()
        ADict.Share.shareReferral(
            context = this,
            referrerId = userId,
            customText = "Dołącz do mnie w grze! Oboje dostaniemy bonus! 🎁"
        )
    }
}