Autore Topic: Notifiche non arrivano se il client al momento dell'invio ha internet spento  (Letto 755 volte)

Offline peppezappia

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    S5 neo
  • Sistema operativo:
    Andriod Lollipop
Ciao ragazzi complimenti per il forum volevo chiedere una mano per un problema che non riesco a risolvere. Il titolo dice tutto io utilizzo il GCM per l'invio di notifiche ma ho il problema che se al momento dell'invio il ricevente ha internet spento la notifica non arriva come se andasse persa per sempre qualcuno di voi mi può dare una mano? vi posto un po di codice grazie a tutti e buona giornata!

php di invio

Codice (PHP): [Seleziona]
<?php include_once 'connection.php';

$myconn = connectToDatabase();
$ricevente = $_POST['ricevente'];
$mittente = $_POST['mittente'];
$type = $_POST['type'];
$id = $_POST['id'];
$data = $_POST['data'];
$api = getCode($ricevente);
$Authorization='AIzaSyBfrXTHDg_TDoD1dKgoSbeTNH2heV_aq30';
$headers = array(
'Authorization: key=' .$Authorization ,
'Content-Type: application/json'
);


$fields = array(    
    'delay_while_idle' => true,
    'time_to_live' =>  2419200,
    'registration_ids' => array( 0 => $api),
    'data' => array(
        'type'=>"$type",
        'id'=>"$id",
        'mittente'=>"$mittente",
        'data'=>"$data"
    ),
);
print_r($fields['data']);
echo sendNotification($headers,$fields);

function sendNotification($h,$f){

// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';

// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, $url );

curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $h);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $f ) );

// Execute post
$result = curl_exec($ch);
echo $result;
// Close connection
curl_close($ch);

return $result;
}

function getCode($ricevente){
    $myconn = connectToDatabase();
    $sql = "SELECT * from user WHERE phone = '$ricevente'";
    $result = mysqli_query($myconn, $sql);
    if($result){
        $row = mysqli_fetch_array($result);
        mysqli_close($myconn);
        return $row['api'];
    }
    $phone2 = '';
    if($ricevente[0] == '+'){
        $phone2 = substr($ricevente, 3, strlen($ricevente));

    }
    else{
        $phone2 = "+39".$ricevente;
    }
    $sql = "SELECT * from user WHERE phone = '$phone2'";
    $result = mysqli_query($myconn, $sql);
    $row = mysqli_fetch_array($result);
    mysqli_close($myconn);
    return $row['api'];

}?>


codice java

Codice (Java): [Seleziona]
public class GcmIntentService extends IntentService {

public GcmIntentService() {
    super("GcmIntentService");
}
NotificationManager notificationManager;
Notification myNotification;

@Override
protected void onHandleIntent(Intent intent) {
    Log.w("Entro","Arriva");
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty()) {

        if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {

            JSONObject json = new JSONObject();
            Set<String> keys = extras.keySet();
            for (String key : keys) {
                try {
                    json.put(key, extras.get(key));
                }
                catch(JSONException e) {
                    e.printStackTrace();
                }
            }
            if(extras.get("type").toString().equals("chiamata")){
                int idNotifica = Integer.parseInt(extras.get("id").toString());
                String mittente = extras.get("mittente").toString();
                String data = extras.get("data").toString();
                Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                Intent myIntent = new Intent(this, SecondActivity.class);
                myIntent.putExtra("toOpen", "2");
                PendingIntent pendingIntent = PendingIntent.getActivity(
                        this,
                        0,
                        myIntent,
                        Intent.FLAG_ACTIVITY_NEW_TASK);

                myNotification = new NotificationCompat.Builder(this)
                        .setContentTitle(Utils.getContactName(mittente, this) + " ti ha cercato!")
                        .setContentText("Ciao, ti ho cercato il " + data)
                        .setTicker("Chiamata ricevuta")
                        .setWhen(System.currentTimeMillis())
                        .setContentIntent(pendingIntent)
                        .setDefaults(Notification.DEFAULT_SOUND)
                        .setAutoCancel(true)
                        .setSmallIcon(R.mipmap.ic_notify)
                        .setSound(uri)
                        .build();

                notificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);

                int id = (int) (new Date().getTime()/1000);
                id += (int)Math.random() * 100;
                notificationManager.notify(id, myNotification);
                GetNotify gt = new GetNotify();
                gt.setId(id);
                gt.setMittente(mittente);
                gt.setCtx(this);
                gt.setData(data);
                GetDatabase gd = new GetDatabase(this);
                gd.createBook(gt);
                sendNotification(idNotifica, mittente);
            }
            else{
                int id = Integer.parseInt(extras.get("id").toString());
                String data = extras.get("data").toString();
                SentDatabase db = new SentDatabase(this);
                List<SentNotify> list = db.getAllBooks();
                for(SentNotify c : list){
                    if(c.getId()== id){
                        Log.d("r", data);
                        c.setLetto(data);
                    }
                }
                db.deleteAll();
                db.addAll(list);
            }
        }
    }
    GCMBroadcastReceiver.completeWakefulIntent(intent);
}

private void sendNotification(int id, String mittente){

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.studionacarlo.com/applicazione/sendNotifica.php");
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    String result = "";
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<>(1);
        int i = (int) (new Date().getTime()/1000);
        i += (int)Math.random() * 100;
        Date currentDate = Calendar.getInstance().getTime();
        java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("dd/MM/yyyy");
        String formattedCurrentDate = simpleDateFormat.format(currentDate);
        java.text.SimpleDateFormat simpleTimeFormat = new java.text.SimpleDateFormat("HH:mm");
        String formattedCurrentTime = simpleTimeFormat.format(currentDate);
        String x =formattedCurrentDate+" alle "+formattedCurrentTime;
        nameValuePairs.add(new BasicNameValuePair("type", "setletto"));
        nameValuePairs.add(new BasicNameValuePair("id", String.valueOf(id)));
        nameValuePairs.add(new BasicNameValuePair("ricevente", mittente));
        nameValuePairs.add(new BasicNameValuePair("data", x));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        // Add your data
        HttpResponse response = httpclient.execute(httppost);

        HttpEntity entity = response.getEntity();
        String htmlResponse = EntityUtils.toString(entity);
        result = htmlResponse;
        Log.w("Stampa ricevuta", result);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}}

ed il manifest

Codice (XML): [Seleziona]
 <receiver
       android:name="GCMBroadcastReceiver"
       android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.giuseppezappia.Services" />
        </intent-filter>
    </receiver>


   <permission android:name="permission.C2D_MESSAGE"          android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name=".permission.RECEIVE" />
<uses-permission android:name="permission.C2D_MESSAGE" />

Offline twofast

  • Utente junior
  • **
  • Post: 59
  • Respect: 0
    • Mostra profilo
    • le mie app
  • Dispositivo Android:
    galaxy s3
  • Play Store ID:
    FastApp
0
ciao, vorrei sapere se sei riuscito a risolvere. Grazie