D
Deleted member 103
Guest
Ciao a tutti,
sto lavorando su una nuova classe "clsAppReview", con la quale è possibile controllare su un'utente ha veramente rilasciato una recensione su Google-Play.
La mia domanda è se giusto fare una cosa del genere o meno.
Il flusso del mio codice sarebbe:
1. intercettare prima della chiusura se la App non ha ricevuto una recensione dall'utente
2. dialogo per assegnare le stelline
3. se l'utente seleziona meno di 4 stelle, allora si chiede se vuole inviare una email con il motivo della sua scelta, non lo si porta sul Play-Store e si chiude la App.
4. se invece seleziona più di 3 stelle, allora si chiede se vuole rilasciare una recensione e se sì, lo si porta sul Play-Store e si chiude la App.
5. al prossimo App-Start (dallo Starter-Service), si controlla se l'utente ha veramente rilasciato una recensione e se sì, non si domanda più.
sto lavorando su una nuova classe "clsAppReview", con la quale è possibile controllare su un'utente ha veramente rilasciato una recensione su Google-Play.
La mia domanda è se giusto fare una cosa del genere o meno.
Il flusso del mio codice sarebbe:
1. intercettare prima della chiusura se la App non ha ricevuto una recensione dall'utente
B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean
If KeyCode = KeyCodes.KEYCODE_BACK Then
'Solo se la App è stata acquistata e non ha ancora ricevuto una recensione dall'utente
If Starter.billmanager.IsLicensevalid And Not(Starter.manager.getBoolean("IsAlreadyRated")) Then
AppRatings(False)
Return True
End If
End If
Return False
End Sub
Private Sub AppRatings(UserAction As Boolean)
...
Starter.AppReview.CheckFistRatingCount
Dim dialog As CustomLayoutDialog
...
If Result = DialogResponse.POSITIVE Then
If star.Rating < 4 Then
Msgbox2Async(".....")
If Result = DialogResponse.POSITIVE Then
' sendmail
End If
Else
Msgbox2Async(".....")
If Result = DialogResponse.POSITIVE Then
Starter.AppReview.RateByGooglePlay
End If
End If
End If
...
If Not(UserAction) Then
Activity.Finish
End If
End Sub
2. dialogo per assegnare le stelline
3. se l'utente seleziona meno di 4 stelle, allora si chiede se vuole inviare una email con il motivo della sua scelta, non lo si porta sul Play-Store e si chiude la App.
4. se invece seleziona più di 3 stelle, allora si chiede se vuole rilasciare una recensione e se sì, lo si porta sul Play-Store e si chiude la App.
5. al prossimo App-Start (dallo Starter-Service), si controlla se l'utente ha veramente rilasciato una recensione e se sì, non si domanda più.
B4X:
'Classe clsAppReview
Sub Class_Globals
Private IdCheckRatingCount As Int = 1
Private ratingCount As Int
Private ratingValue As Double
Public IsFirstChecking As Boolean
End Sub
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize
IsFirstChecking = False
SetDefaults
End Sub
Public Sub CheckFistRatingCount
IsFirstChecking = True
CheckInternetConnection(IdCheckRatingCount)
End Sub
Public Sub CheckNextRatingCount
IsFirstChecking = False
CheckInternetConnection(IdCheckRatingCount)
End Sub
Private Sub CheckInternetConnection(IdConnection As Int)
Dim job As HttpJob
job.Initialize(IdConnection, Me)
job.Download("https://www.google.com")
End Sub
Private Sub DownloadStorePage
Dim job As HttpJob
job.Initialize("AppRating", Me)
job.Download("https://play.google.com/store/apps/details?id=" & Application.PackageName)
End Sub
Private Sub JobDone(job As HttpJob)
Dim res As String
If job.Success Then
res = job.GetString
'Log("res=" & res)
Select job.JobName
'****** Version ******
Case IdCheckRatingCount
DownloadStorePage
Case "AppRating"
'Sicherstellen dass das String "aggregateRating" enthalten ist, wenn nicht, dann sind keine Bewertungen vorhanden.
Dim index1 As Int = res.IndexOf("aggregateRating")
If index1 > 0 Then
Dim aggregateRating As String = res.SubString2(index1 + 18, res.IndexOf2("}", index1 + 18)).Replace(",",":")
Log("aggregateRating=" & aggregateRating)
Dim str() As String = Regex.Split(":", aggregateRating)
If str.Length > 5 Then
ratingValue = str(3).Replace(QUOTE,"")
ratingCount = str(5).Replace(QUOTE,"")
Log("ratingCount=" & ratingCount)
AppReviewResult(ratingCount, ratingValue)
End If
End If
End Select
Else
#if DEBUG
ToastMessageShow("ERROR!" & CRLF & job.ErrorMessage, True)
#End If
End If
job.Release
End Sub
Private Sub AppReviewResult(Count As Int, Value As Double)
Log("Count=" & Count & " IsFirstChecking=" & IsFirstChecking)
Log("intRatingCount= " & Starter.manager.getString("intRatingCount"))
Log("intRatingValue= " & Starter.manager.getString("intRatingValue"))
Starter.manager.setBoolean("IsFirstChecking", IsFirstChecking)
If IsFirstChecking Then
Starter.manager.SetString("intRatingCount", Count)
Starter.manager.SetString("intRatingValue", Value)
Else
If Count > Starter.manager.getString("intRatingCount") And Value > Starter.manager.getString("intRatingValue") Then
Starter.manager.setBoolean("IsAlreadyRated", True)
Starter.manager.SetString("intRatingCount", Count)
Starter.manager.SetString("intRatingValue", Value)
End If
End If
End Sub
Public Sub RateByGooglePlay
Dim fURI As String
fURI = "market://details?id=" & Application.PackageName
Dim Market As Intent
Market.Initialize(Market.ACTION_VIEW,fURI)
StartActivity (Market)
End Sub
Private Sub SetDefaults
If Not(Starter.manager.ExistKey("IsFirstChecking")) Then Starter.manager.SetBoolean("IsFirstChecking", False)
If Not(Starter.manager.ExistKey("IsAlreadyRated")) Then Starter.manager.SetBoolean("IsAlreadyRated", False)
If Not(Starter.manager.ExistKey("intRatingCount")) Then Starter.manager.SetString("intRatingCount", 0)
If Not(Starter.manager.ExistKey("intRatingValue")) Then Starter.manager.SetString("intRatingValue", 0)
End Sub