Autore Topic: Inviare notifiche push a più device da server PHP/MySQL  (Letto 5008 volte)

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Inviare notifiche push a più device da server PHP/MySQL
« il: 08 Luglio 2013, 12:38:02 CEST »
0
Hi there.
Sto cercando di aggiungere le notifiche push alla mia applicazione. Per essa, ho costruito un CMS usando come framework CodeIgniter (PHP, MySQL).
Vorrei aggiungere una sezione al CMS per inviare a tutti i dispositivi registrati notifiche push. Ho cercato un pò in giro per il web e sto facendo fatica a trovare una guida o un tutorial completo su come fare.
Quello più completo che ho trovato è questo, su androidHive : Android Push Notifications using Google Cloud Messaging (GCM), PHP and MySQL

Qualche suiggerimento?
Grazie! :-)
True perfection has to be imperfect

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inviare notifiche push a più device da server PHP/MySQL
« Risposta #1 il: 08 Luglio 2013, 13:49:09 CEST »
0
Bene o male GCM è la via da usare. Per cui quel tutorial dovrebbe essere un buon punto di partenza.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Inviare notifiche push a più device da server PHP/MySQL
« Risposta #2 il: 08 Luglio 2013, 14:09:52 CEST »
0
Bene o male GCM è la via da usare. Per cui quel tutorial dovrebbe essere un buon punto di partenza.

Sì infatti sto cercando di utilizzare GCM ... sto provando a seguire la documentazione di Android, sperando in bene ...
True perfection has to be imperfect

Offline angeloflove82

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy next
Re:Inviare notifiche push a più device da server PHP/MySQL
« Risposta #3 il: 12 Novembre 2013, 17:18:31 CET »
0
Salve a tutti, rispolvero questo post.
Ho scaricato l'esempio completo su androidHive (http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/)e seguito tutte le istruzioni alla lettera.
Effettivamente le notifiche arrivano nella barra, ma cliccando sul messaggio sulla barra parte l'activity ed è vuota.
Lasciando l'activity aperta, ed inviando un nuovo messaggio quest'ultimo viene visualizzato sia sulla barra che nella textview.
Perchè con l'app chiusa cliccando sulla barra della notifica quando parte l'activity non vedo il messaggio?
Grazie a tutti anticipatamente.
UN BEL non si rifiuta mai !!!

Offline MikeKeepsOnShine

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • mikekeepsonshine
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Fame , Samsung Galaxy Tab 2 7.0
  • Sistema operativo:
    Windows 7
Re:Inviare notifiche push a più device da server PHP/MySQL
« Risposta #4 il: 12 Novembre 2013, 17:46:59 CET »
0
Se ho capito bene, è la textView che rimane vuota giusto?
Potresti postare il codice dell'activty che viene richiamata che popola la textview?

PS: comunque ho un'idea su come risolvere il tuo problema, se è quello qua sopra: al click sulla notifica lanci un Intent ... attacca a quell'Intent un extra col testo che vuoi che si visualizzi e recuperi il testo nell'activity di atterragio ... aspetto comunque il codice ;) !
True perfection has to be imperfect

Offline angeloflove82

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy next
Re:Inviare notifiche push a più device da server PHP/MySQL
« Risposta #5 il: 12 Novembre 2013, 18:21:18 CET »
0
Ecco.
Ho pensato di scrivere i messaggi nel db e riprenderli da li così mi torna pure utile per una cronologia dei messaggi.

Codice (Java): [Seleziona]
package com.androidhive.pushnotifications;

import static com.androidhive.pushnotifications.CommonUtilities.DISPLAY_MESSAGE_ACTION;
import static com.androidhive.pushnotifications.CommonUtilities.EXTRA_MESSAGE;
import static com.androidhive.pushnotifications.CommonUtilities.SENDER_ID;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gcm.GCMRegistrar;

public class MainActivity extends Activity {
        // label to display gcm messages
        TextView lblMessage;
       
        // Asyntask
        AsyncTask<Void, Void, Void> mRegisterTask;
       
        // Alert dialog manager
        AlertDialogManager alert = new AlertDialogManager();
       
        // Connection detector
        ConnectionDetector cd;
       
        public static String name;
        public static String email;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                cd = new ConnectionDetector(getApplicationContext());

                // Check if Internet present
                if (!cd.isConnectingToInternet()) {
                        // Internet Connection is not present
                        alert.showAlertDialog(MainActivity.this,
                                        "Internet Connection Error",
                                        "Please connect to working Internet connection", false);
                        // stop executing code by return
                        return;
                }
               
                // Getting name, email from intent
                Intent i = getIntent();
               
                name = i.getStringExtra("name");
                email = i.getStringExtra("email");             
               
                // Make sure the device has the proper dependencies.
                GCMRegistrar.checkDevice(this);

                // Make sure the manifest was properly set - comment out this line
                // while developing the app, then uncomment it when it's ready.
                GCMRegistrar.checkManifest(this);

                lblMessage = (TextView) findViewById(R.id.lblMessage);
               
                registerReceiver(mHandleMessageReceiver, new IntentFilter(
                                DISPLAY_MESSAGE_ACTION));
               
                // Get GCM registration id
                final String regId = GCMRegistrar.getRegistrationId(this);

                // Check if regid already presents
                if (regId.equals("")) {
                        // Registration is not present, register now with GCM                  
                        GCMRegistrar.register(this, SENDER_ID);
                } else {
                        // Device is already registered on GCM
                        if (GCMRegistrar.isRegisteredOnServer(this)) {
                                // Skips registration.                         
                                Toast.makeText(getApplicationContext(), "Already registered with GCM", Toast.LENGTH_LONG).show();
                        } else {
                                // Try to register again, but not in the UI thread.
                                // It's also necessary to cancel the thread onDestroy(),
                                // hence the use of AsyncTask instead of a raw thread.
                                final Context context = this;
                                mRegisterTask = new AsyncTask<Void, Void, Void>() {

                                        @Override
                                        protected Void doInBackground(Void... params) {
                                                // Register on our server
                                                // On server creates a new user
                                                ServerUtilities.register(context, name, email, regId);
                                                return null;
                                        }

                                        @Override
                                        protected void onPostExecute(Void result) {
                                                mRegisterTask = null;
                                        }

                                };
                                mRegisterTask.execute(null, null, null);
                        }
                }
        }              

        /**
         * Receiving push messages
         * */

        private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                        String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
                        // Waking up mobile if it is sleeping
                        WakeLocker.acquire(getApplicationContext());
                       
                        /**
                         * Take appropriate action on this message
                         * depending upon your app requirement
                         * For now i am just displaying it on the screen
                         * */

                       
                        // Showing received message
                        lblMessage.append(newMessage + "\n");                  
                        Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();
                       
                        // Releasing wake lock
                        WakeLocker.release();
                }
        };
       
        @Override
        protected void onDestroy() {
                if (mRegisterTask != null) {
                        mRegisterTask.cancel(true);
                }
                try {
                        unregisterReceiver(mHandleMessageReceiver);
                        GCMRegistrar.onDestroy(this);
                } catch (Exception e) {
                        Log.e("UnRegister Receiver Error", "> " + e.getMessage());
                }
                super.onDestroy();
        }

}
UN BEL non si rifiuta mai !!!