Italian Qualche consiglio su questa classe

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
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
1614542270309.png

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
 
D

Deleted member 103

Guest
Con la sola piccola differenza che gli sviluppatori devono subire, gli utenti... possono disinstallare e scaricare un'altra app 😄🤔
e si, questa è la piccola differenza. :rolleyes:
 
Top