79 messaggi dal 18 aprile 2018
Buongiorno a tutti,
la necessità di creare un app accessibile sia da ANDROID che da IOS in tempi rapidi mi ha portato a sviluppare un progetto Xamarin con OneSignal molto semplice con una webview che si collega alla mia app MVC.
Testato su android tutto funzionante.
Adesso si complica un pò perchè avrei bisogno di assegnare dei tag User (gruppi) dopo che hanno effettuato il login.
Ad esempio:
Mario Rossi nel mio db appartiene al gruppo "Dipendenti", devo quindi aggiungere questo tag al suo device.
Per fare ciò dalla documentazione ho capito che devo utilizzare le API ma non so come utilzzarle.

Su una guida ho trovato questo:

OneSignal describe this issue under edit device section in it's documentation https://documentation.onesignal.com/reference#edit-device :

by using playerId in calling this web service with PUT method:

https://onesignal.com/api/v1/players/{playerid}

and in body:

{
 "app_id": "Your app id",
 "tags" : {
    "add_new_tag":"joined",
    "remove_old_tag" : ""
    }
}


quindi sostanzialmente credo di dover chiamare l'API citata con un metodo PUT, che provo a fare inserendo (intanto nel controller index, per provare) così:



        public ActionResult Index()
        {
            using (var client = new HttpClient())
            {
                var url = new Uri("https://onesignal.com/api/v1/players/18408a73-df37-4cf0-92a4-6b84c4720171");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "Rest ID");
                var obj = new
                {
                    app_id = "543e3bc3-d6f2-4b40-9730-369e1025ff12",
                    contents = new { en = "English Message" },
                    included_segments = new string[] { "All" },
                    tags = "user_type:\"1\""
                };
                var json = JsonConvert.SerializeObject(obj);
                var content = new StringContent(json, Encoding.UTF8, "application/json");
                var response =  client.PostAsync(url, content);

            }

            return View();
        }



considerando poi che chiaramente il palyerID me lo devo ricavare ora ne ho messo uno di prova.

Aggiungo una cosa, prima di buttarmi su Xamarin ho provao a usare GoNative con cui non ho avuto problemi in quanto ha generato lui l'app, io ho dovuto solo configurare OneSignal con FireBase e per l'assegnazione dei Tags è bastato inseire questo semplice codice javascript:


  <script>
var tags = {
user_type: '1'
};


window.location.href = 'gonative://onesignal/tags/set?tags=' + encodeURIComponent(JSON.stringify(tags));
console.log('ok')
  </script>




Grazie Mille
Modificato da Mirko2018 il 11 dicembre 2018 14.23 -
11.857 messaggi dal 09 febbraio 2002
Contributi
Ciao,
qual è il quesito? Hai degli errori inviando la richiesta PUT?
ciao,
Moreno
Modificato da BrightSoul il 15 dicembre 2018 20.54 -

Enjoy learning and just keep making
79 messaggi dal 18 aprile 2018
Ciao Moreno,
praticamente non mi tornava nulla, comunque alla fine ho risolto facendo una chiamata ajax.

Ho quasi risolto i miei problemi con xamarin e la webView ma sto forzando un pò la cosa. Ho letto in giro che bisogna modificare il file manifest che permetterà così di poter accedere al c# dell'app chiamandola con un url,esattamente come fa gontive:

gonative://onesignal/tags/set?tags=' + encodeURIComponent(JSON.stringify(tags));

non essendo riuscito a fare questa cosa ho pensato di risolvere così.

un timer nell'applicazione xamarin che manda con metodo GET il player id a una pagina della webview( che sarà accessibile solo a chi ha effettuato il login) se la pagina è accessibile allora il metodo ajax chiama il controller che identificherà il "gruppo" dell'utente e con il metodo PUT lo invierà a onesignal.
E poi devo fare qualche test per fermare il timer che invece continuerà a provare se la pagina fosse non accessibile.
Ma non è che mi piace molto come soluzione...
11.857 messaggi dal 09 febbraio 2002
Contributi
Ma questa applicazione come la caricherai sui dispositivi Android e iOS? Dubito che gli store approveranno un'app che non ha funzionalità offline dato che è solo una WebView in cui appare un sito.

In più sembra richiedere uno sforzo che potresti evitare se leggessi il qr code direttamente dalla pagina web con questo:
https://github.com/schmich/instascan
Modificato da BrightSoul il 16 dicembre 2018 14.22 -

Enjoy learning and just keep making
79 messaggi dal 18 aprile 2018
Sinceramente il problema non me lo sono posto, gonative.io offre un servizio dove metti l'url del sito e crea un app che può essere pubblicata sia su android che ios, e pagando qualcosa in più pubblicano provvedono loro a pubblicare negli store. Quindi immagino non ci siano problemi. In realtà mi serve una soluzione rapida per pubblicare questa app, ho tempi stretti e non ho tempo di studiarmi la struttura di xamarin ecc.. ecc.., la webview mi tornerebbe più facile, considerando poi che avrei bisogno di EF per la registrazione degli utenti.

(Spero di non stare perdendo tempo)

Secondo te è fattibile da xamarin.form inviarmi un dato in background a una pagina della webview che in jquery recupererà il dato fornito tramite get ed eseguira uno script?

io sto provando così ma non funziona:

System.Net.HttpWebRequest wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            wreq.Method = "GET";
            wreq.Timeout = 10000;

            System.Net.HttpWebResponse wr = (System.Net.HttpWebResponse)wreq.GetResponse();

            // If the page answers correctly the return value is obtained 
            if (wr.StatusCode == System.Net.HttpStatusCode.OK)
            {
                System.IO.Stream s = wr.GetResponseStream();
                System.Text.Encoding enc = System.Text.Encoding.GetEncoding("utf-8");
                System.IO.StreamReader readStream = new System.IO.StreamReader(s, enc);

                // vreturn value
                result = readStream.ReadToEnd();

            }
11.857 messaggi dal 09 febbraio 2002
Contributi

Secondo te è fattibile da xamarin.form inviarmi un dato in background a una pagina della webview

Te l'ho detto, dovresti implementare la lettura del codice qr direttamente dalla pagina web.
Se comunque preferisci fare diversamente, puoi invocare del javascript contenuto nella pagina seguendo questo articolo:
https://xamarinhelp.com/xamarin-forms-webview-executing-javascript/



- immagino non ci siano problemi
- tempi stretti e non ho tempo
- soluzione rapida
- spero di non stare perdendo tempo

In bocca al lupo, poi fammi sapere com'è andata. Io ti consiglio di informare subito il management che il rischio di fallimento del progetto è abbastanza elevato. In questo modo potranno allocare competenze e budget adeguati.

ciao,
Moreno

Enjoy learning and just keep making
79 messaggi dal 18 aprile 2018
eheheh.. la vedo brutta anche io.. sto smanettando un pò... secondo te...
potrei riuscire aggiungendo al progetto xamarin un altro progetto (Libreria di classi entity framework) copiando la struttura per esempio per la registrazione utenti accedendo così ai DB?
11.857 messaggi dal 09 febbraio 2002
Contributi
potrei riuscire aggiungendo al progetto xamarin un altro progetto (Libreria di classi entity framework) copiando la struttura per esempio per la registrazione utenti accedendo così ai DB?


No, il database deve trovarsi al sicuro nel server dietro uno strato Web API. Nel tuo caso perché vuoi portare EF sull'app mobile?
Modificato da BrightSoul il 16 dicembre 2018 15.44 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.