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 Sub2. 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