Italian aggiornamento APP senza google play

giannimaione

Well-Known Member
Licensed User
Longtime User
ciao ragazzi,
è possibile aggiornare una APP senza doverla pubblicare su google play o simili?
il problema è questo:
ho realizzato una APP per una azienda ; l'utilizzo è destinato SOLO ad alcuni collaboratori aziendali (circa 6 persone). Come posso "mandare" gli aggiornamenti senza utilizzare google play, e comunque senza correre il rischio che possa essere scaricata da altre persone?
 

moster67

Expert
Licensed User
Longtime User
Puoi mandare l'aggiornamento tramite e-mail onde gli utenti hanno abilitato l'opzione "Affidati dei fonti esterni" o simile (non mi ricorda esattamente come viene chiamato). Potresti anche mantenere l'app su Google Play (sempre) come beta e far diventare gli utenti "beta-testers" (v. il tuo developer control panel come fare).
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Se hai a disposizione un sito puoi inserire l'apk in questo sito. All'avvio dell'app puoi testare la data di questo file. Se è più recente dell'app presente nel device si effettua l'upload e l'installazione.
Il sistema è molto simile a quello presente in Google Play; l'unica differenza è che per aggiornare l'app bisogna prima lanciarla; in Google Play invece non occorre avere l'app avviata.
Si può fare (io lo feci; cit. Totò)
 

giannimaione

Well-Known Member
Licensed User
Longtime User
ok! ho un sito. (signori si nasce e io, modestamente, lo naqui. Totò)
riesco anche ad eseguire un upload... ma poi come faccio ad eseguire l'installazione con l'app avviata?
 

LucaMs

Expert
Licensed User
Longtime User
In questi giorni sono più pigro del solito (forse sto andando in letargo :D) per cui non ho molta voglia di pensare o fare prove.
Ho trovato al volo questo thread, probabilmente ti potrebbe essere utile.
https://www.b4x.com/android/forum/threads/will-i-have-to-like-how-can-i-find-my-downloaded-apk?.31788/#content

Devo dire che sono intervenuto soprattutto per questa frase:
(signori si nasce e io, modestamente, lo naqui. Totò)
sia perché adoro Totò, sia perché proprio ieri stato pensando ad una frase simile.

Moltissimi errori comuni, fatti da giornalisti o presentatori tv, mi fanno incacchiare (tanto che aprii un thread su questo, forse su b4xitaliangroup, però).
Ieri stavo pensando ad un errore che facciamo tutti, sottocristo compreso.
"Quando sei nato?"
"Sono nato il xx/xx/xxxx"

Sono entrambe sbagliate, domanda e risposta (le sbaglio anch'io, o meglio, da oggi non più).

Perché?

:)
 

udg

Expert
Licensed User
Longtime User
Ciao a tutti e grazie a @LucaMs per la pubblicità..eheh!
In effetti la libreria AppUpdating è nata proprio per risolvere un problema simile. L'unico elemento da ricordare è che su device su cui non si è acquisito il livello root (ovvero nel caso più generale) non è possibile installare la nuova versione di un'app in modo "silenzioso" ovvero senza chiedere all'utente di confermare.
Per il caso in oggetto dove solo alcuni dovrebbero essere autorizzati a scaricare gli aggiornamenti, io agirei sui permessi del folder in cui viene posto il file da prelevare, visto che i possibili utenti sono davvero in pochi.
Nel thread della libreria è spiegato come a suo tempo mi regolai tramite .htaccess .

udg
ps: oggi nienet UUUUHHHHHHUUUUUUUUU che devo risparmiarmi per "Allowin" (all'americana così Luca ha lo spunto giusto per dirne quattro su anglicismi e tradizioni consumistiche altrui, giustamente).
pps: Essere nato. Forse perché implica un ruolo attivo del nascituro?
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Premesso che l'app in cui utilizzo il mio sistema si chiama "orario.apk" ci vuole la libreria HTTP (1.36) e il modulo DownloadService con la Sub seguente :

B4X:
Sub Finish
   Log ("DownloadService Sub Finish")
   JobStatus = STATUS_DONE
   '--- aggiornamento app
 
     CallSub(Main, "FinishUpdate")
     Service.StopForeground(1)
     If IsPaused(Main) Then
       Notification1.Sound = False
       Notification1.SetInfo("Download Service", "Download complete", Main)
       Notification1.AutoCancel = True
       Notification1.Notify(1)
     End If



Nel modulo HttpUtils2Service bisogna modificare la Sub hc_ResponseSuccess(...) in modo che testi la data del file apk presente nel web.
Non ne fa il download, legge solo la data del file.


B4X:
Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
     Dim Headers As Map=Response.GetHeaders
   Dim i        As Int
   Dim Key, Value As String
   Try ' aggiunto da me
    Response.GetAsynchronously("response", File.OpenOutput(TempFolder, TaskId, False), True, TaskId)
    For i=0 To Headers.Size-1
       Key=Headers.GetKeyAt(i)
       Value=Headers.GetValueAt(i)
       If Key="Last-Modified" Then
         If Response.ContentType="text/plain" Then Main.XDataAppRemota=Value '  : Log("Riconosciuta data app = " & Main.XDataAppRemota)
       End If
    Next
     '--- fine blocco aggiunto da me
    Catch  ' aggiunto da me
       Log ("NO hc_ResponseSuccess")
    End Try  ' aggiunto da me

End Sub


In Main Process_Global

B4X:
'--- app (Job1)
Dim XDataAppRemota   As String    ' valore restituito da GetDate
Dim DataAppRemota     As String  ' nel formato GG/MM/YYYY
Dim DtAppRemota     As Long  ' variabile long
Dim DataAppLocale     As String  ' nel formato GG/MM/YYYY
Dim DtAppLocale     As Long  ' variabile long


In Main


B4X:
Sub FinishUpdate
   '--- aggiorna la versione dell'app
   If DownloadService.DoneSuccessfully = True Then
     DownloadService.JobStatus = DownloadService.STATUS_NONE
     ProgressDialogHide
     If File.Exists(File.DirRootExternal,"orario.apk") Then
       '--- installo
       Dim i As Intent
       i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirRootExternal, "orario.apk"))
       i.SetType("application/vnd.android.package-archive")
       StartActivity(i)
     Else
       Msgbox ("ERROR dowload orario.apk","ERROR")
     End If
   End If 
End Sub

In Main Activity_Create

B4X:
Dim job1 As HttpJob
job1.Initialize("Job1", Me)
job1.Download ("http://" & Sito & "orario.apk")

inoltre

B4X:
Sub JobDone (Job As HttpJob)
   Dim Risposta          As String
   Dim Msg          As String
   Dim strDataValiditaOrario      As String
   Dim XData         As String
 
 
   If Job.Success = True Then
     FlagInternet=True
     Select Job.JobName
   
      Case "Job1"  '  APK DATA DELL'APP
         '--- Converto la stringa DataApp in una data vera, in modo da poter fare i confronti
           '  In realtà sul web c'è ore 18:54 ed io leggo 16:54 GMT
           '  Probabilmente c'è un'ora di fuso orario più un'ora di ora legale.
         If XDataAppRemota.Trim <> "" Then
          '--- leggo la data dell'ultima installazione (coincide con DataOrarioXMLlocale)
           DtAppLocale=GetDate("alpvir.orario")
           DateTime.DateFormat ="dd/MM/yyyy - HH-mm-ss"  ' necessario ?
             DataAppLocale=DateTime.date(DtAppLocale)
          '--- remoto
           DtAppRemota=DateTime.DateParse(Comune.TraduciData(XDataAppRemota))
           DtAppRemota=DtAppRemota+2*60*60*1000 ' aggiungo 2 ore pari a 2 ore *3600 sec * 1000 ms
           DataAppRemota=DateTime.Date(DtAppRemota)
          If DtAppRemota>DtAppLocale Then
             Msg="E' disponibile una più recente versione dell'app (" & Left(DataAppRemota,10) & ")" & CRLF & "Vuoi scaricarla ?"
             'Msg=Msg & CRLF & "(al terminare rilancia l'app)"
             Risposta = Msgbox2(Msg, "DOWNLOAD APP", "OK", "", "RINUNCIO",Null)
            If Risposta = DialogResponse.Positive Then  ' ' --- aggiorno l'app
               ProgressDialogShow ("Attendere")
               DownloadService.Url = "http://" & Sito & "/" & NomeApp
               DownloadService.Target = File.OpenOutput(File.DirRootExternal,NomeApp, False)
               StartService(DownloadService)
             End If
           'Else
             'Log (" --> Non è necessario aggiornare l'app")
           End If
         Else
           Log ("Sul Web non c'è ancora l'app")
         End If
       
     End Select
   Else
  
       Log("Error: " & Job.ErrorMessage)
    
     End If 
   End If
   Job.Release
End Sub

Nel modulo Comune.bas la sub TraduciData che ho risolto molto inelegantemente così :

B4X:
Sub TraduciData(D As String) As String
  Dim S   As String
  Dim S2     As String
  Dim S3     As String
  S2=Ucase(Mid(D,7,11)).Trim
  '--- mesi
  S2 = Replace(S2, "JAN","01")
  S2 = Replace(S2, "FEB","02")
  S2 = Replace(S2, "MAR","03")
  S2 = Replace(S2, "APR","04")
  S2 = Replace(S2, "MAY","05")
  S2 = Replace(S2, "JUN","06")
  S2 = Replace(S2, "JUL","07")
  S2 = Replace(S2, "AUG","08")
  S2 = Replace(S2, "SEP","09")
  S2 = Replace(S2, "OCT","10")
  S2 = Replace(S2, "NOV","11")
  S2 = Replace(S2, "DEC","12")
 
  S3=Mid(D,19,8).Trim
  S = S2.Replace (" ","/") & " - " & S3.Replace(":","-")
  Return S
End Sub

Provengo dal VB6 per cui ci sono, sparse quà e là, varie funzioni specifiche di questo linguaggio.
Funziona, ma con una particolarità: sotto Android 2.3 viene aggiornata l'app e si rimane dentro di essa.
Con Android 5.0 viene aggiornata l'app e poi essa termina. Bisogna rilanciarla per verificare che essa effettivamente è stata aggiornata.
Se tu o qualcun'altro trovate il rimedio a questa (piccola) anomalia ....
Spero di aver inserito tutto quanto necessario.
Punto, due punti. Abundandis in abundandium.
 

LucaMs

Expert
Licensed User
Longtime User
(wow, devo svegliarmi e leggere il piccolo post di @AlpVir :))


pps: Essere nato. Forse perché implica un ruolo attivo del nascituro?
No, non è questo :)
Semplicemente, si dovrebbe usare il passato remoto, non il passato prossimo (a meno che non si abbia una settimana di vita al massimo e si sia già in grado di rispondere :D)

"Quando sei nato?" "Quando nascesti?"
"Sono nato il..." "Nacqui il ..."

Punto, due punti. Abundandis in abundandium.
:D
 

udg

Expert
Licensed User
Longtime User
Semplicemente, si dovrebbe usare il passato remoto, non il passato prossimo (a meno che non si abbia una settimana di vita al massimo e si sia già in grado di rispondere :D)
Giusto. Santa grammatica martire!

Apro una parente
Però mi piaceva di più l'idea del ruolo passivo del nascituro ("quando ti fecero nascere?") e qui una risposta adatta sarebbe stata "non saprei, non ricordo..eheh".
Anche l'aspetto filosofico non sarebbe stato male (della serie "ogni risveglio è una rinascita", da cui il passato prossimo da rivalutare).
O per chi crede nella reincarnazione, una risposta tipo "a quale volta ti riferisci?".
Insomma di argomentazioni per perdere tempo e non lavorare se ne potrebbero trovare tante. E per rimanere in tema di battute di Totò, è giusto pensare al boss che ripeta la celeberrima "e io pago!".
Chiudo la parente
 

LucaMs

Expert
Licensed User
Longtime User
HHHUUUHHH è vero che oramai si legge poco (in Italia, poi, sempre stato) però io, al posto tuo, mi darei alla scrittura (chissà, magari libri elettronici, non ne so un tub8).
Uhm... primo titolo: "L'italiano vero" (non la lingua italiana, ovviamente, ma il cittadino italiano).
In un mesetto o poco più scriveresti un best-seller.
 
Top