Spanish FCM en B4a y Php...

gainax00

Member
Hola a todos!!!!
anterior mente mis app's se podían abrir dando click en el mensaje push que llegaba de un PHP, actualmente mis apps ya no abren con ese código en PHP

php:
$topic='/topics/'."general";
$data = array("to" => $topic, "notification" => array( 'priority'=>'high',"title" => "patito.offline",
    "body" => "patito.com","icon" => "icon.png", "click_action" => "http://patito.com"));
$data_string = json_encode($data);
echo "The Json Data : ".$data_string;
$headers = array ( 'Authorization: key=' . $API_ACCESS_KEY, 'Content-Type: application/json' );
$ch = curl_init(); curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, $data_string);
$result = curl_exec($ch);
curl_close ($ch);

pero... si envio el mensaje desde una App en b4a sí abren!!!, código en B4A

push:
Private Sub SendMessage(Topic As String, Title As String, Body As String)
    Dim Job As HttpJob
    Job.Initialize("fcm", Me)
    Dim m As Map = CreateMap("to": $"/topics/${Topic}"$, "priority": "normal")
    Dim data As Map = CreateMap("title": Title, "body": Body)
    m.Put("data", data)
    Dim jg As JSONGenerator
    jg.Initialize(m)
    Job.PostString("https://fcm.googleapis.com/fcm/send", jg.ToString)
    Job.GetRequest.SetContentType("application/json;charset=UTF-8")
    Log(jg.ToString)
    Job.GetRequest.SetHeader("Authorization", "key=" & API_KEY)
End Sub

Sub JobDone(job As HttpJob)
    Log(job)
    If job.Success Then
        Log(job.GetString)
    End If
    job.Release
End Sub

Sub Button1_Click
    SendMessage("general", "Test", "This is only notification test")
End Sub

Alguien podría decirme / explicarme / hacerme el favor de representar el código de B4A a PHP, en serio que lo intente pero no di con la solución
el código de B4A lo tome de aquí https://www.b4x.com/android/forum/t...cloud-messaging-fcm.67716/page-14#post-495334
de antemano gracias

F3l1z C0d1f1c4c10n a todos!!!!
 

josejad

Expert
Licensed User
Longtime User
Hola:

Echa un ojo a este post. Parece que hay algún problema si envías datos en la parte de "notificación", y es mejor hacerlo desde la sección "data".
Prueba algún otro código en php para enviar el mensaje, por ejemplo este código, usa la parte de data.
 

gainax00

Member
Hola:

Echa un ojo a este post. Parece que hay algún problema si envías datos en la parte de "notificación", y es mejor hacerlo desde la sección "data".
Prueba algún otro código en php para enviar el mensaje, por ejemplo este código, usa la parte de data.
Eres un crack !!
en efecto todo funciona excelente!!!

Gracias!!!
no sabia eso de enviar a data y no a notification.
no te miento tengo 6 códigos en php diferentes y busque como 30 paginas y ninguna muestra eso de la "data"
 

gainax00

Member
Bueno compañeros lo intente pero nada... no entiendo la estructura de FCM pues con el código PHP que modifique pasan 2 cosas
si mando mensaje con DATA llega el mensaje (sin imagen), correctamente y si doy click me abre la APP
si mando mensaje con NOTIFY llega el mensaje con la imagen pero si doy click no abre la APP
y ya probé "urlImage" o sólo "image" pa la dirección de la imagen pero no da... alguien sabe que estoy haciendo mal!!!

FCM-PHP:
define( 'API_ACCESS_KEY', $apiKey );


$notify= array
(
    'image'    => 'https://patito.com.mx/banner/anuncio.png',
    'body'    => 'body',
    'title'        => 'This is a title'
 
);
$msg = array
(
    'image'    => 'https://patito.com.mx/banner/anuncio.png',
    'body'    => 'Cuerpo de la noticia o body',
    'message'     => 'noaplica',
    'title'        => 'Titulo de la noticia',
    'subtitle'    => 'noaplica',
    'tickerText'    => 'noaplica',
   
);
$fields = array
(
    'to' => '/topics/general',
    'data' => $msg,//OPCION CORRECTA SIN IMAGEN CON CLICK PARA ABRIR APP
    //'notification'=>$notify //OPCION CORRECTA CON IMAGEN PERO SIN CLICK PARA ABRIR APP
);
$headers = array
(
    'Authorization: key=' . API_ACCESS_KEY,
    'Content-Type: application/json'
);

había sacrificado mostrar imagen por click pero ahora necesito ambas imagen y click :(
Gracias de antemano

F3l1z c0d1f1c4c10n!!!!!!!!!!
 

Ferdari

Active Member
Licensed User
Longtime User
:( nadie con una idea!!???
del porqué pasa eso?
Hola, yo en mis notificaciones primero descargo la imagen y luego genero la notificación

B4X:
Sub fm_MessageArrived (Message As RemoteMessage)
    Log("Message arrived")
    
    Main.notiAction=Message.GetData.Get("a")
    Main.NotiData=Message.GetData.Get("d")
    Main.NotiMsg=Message.GetData.Get("body")
    Main.NotiTitle=Message.GetData.Get("title")
    Main.NotiPic=Message.GetData.Get("pic")
    
    Dim n2 As NB6
    Dim NotiBitmap As Bitmap

    If Message.GetData.ContainsKey("pic") Then
        Dim j As HttpJob
        j.Initialize("j",Me)
        j.Download(Message.GetData.Get("pic"))
        Wait For (j) JobDone(j As HttpJob)
        If j.Success Then
            NotiBitmap=j.GetBitmap
        Else
            LogColor("Error img Noti", Colors.Red)
            NotiBitmap.initialize(File.DirAssets,"miniicon.png")
        End If
        j.Release
    Else
        NotiBitmap.initialize(File.DirAssets,"miniicon.png")
    End If
    
    'Aquí NotiBitmap ya trae la imagen descargada---------
    n2.Initialize("default", Application.LabelName, "DEFAULT").AutoCancel(True).BigPictureStyle( NotiBitmap, NotiBitmap, Message.GetData.Get("title"), Message.GetData.Get("body")).SmallIcon(LoadBitmap(File.DirAssets,"miniicon.png"))
    
End Sub

Espero te sirva.
 
Top