📤 Share
Moduł udostępniania z analityką i systemem referral.
Przegląd
Moduł Share zapewnia rozszerzone funkcje udostępniania:
- Proste udostępnianie tekstu, URL, obrazów, plików
- Śledzenie statystyk udostępnień
- System referral z generowaniem linków
- Eventy i callbacki
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! 🎁"
)
}
}