Como enviar notificações push com scriptcase?

Oi Pessoal,

Fiz algumas buscas na internet e consegui baixar um exemplo onde foi feito um html simples com os campos: API KEY, TOKEN, Título e Mensagem. No exemplo que baixei funciona sem problemas, o arquivo que recebe os campos é um arquivo em php. Como eu poderia integrar as funcionalidades desse php para minha aplicação? Ou se tem alguma forma de colocá-lo em uma pasta e fazer a chamada para ele por dentro da minha aplicação?

Att.

Guilherme

Utilize uma APP do tipo BLANK e replique o seu arquivo PHP simples assim

só por curiosidade, qual serviço de push esta usando ? nacional ?

Foi exatamente isso que eu fiz, e não consegui.

só por curiosidade, qual serviço de push esta usando ? nacional ?

Estou usando gcm do google, configurei no console Developers e estou utilizando esse código aqui:

<?php class GCMPushMessage { var $url = 'https://android.googleapis.com/gcm/send'; var $serverApiKey = ""; var $devices = array(); function GCMPushMessage($apiKeyIn){ $this->serverApiKey = $apiKeyIn; } function setDevices($deviceIds){ if(is_array($deviceIds)){ $this->devices = $deviceIds; } else { $this->devices = array($deviceIds); } } function send($message, $data = false){ if(!is_array($this->devices) || count($this->devices) == 0){ $this->error("No devices set"); } if(strlen($this->serverApiKey) < 8 ){ $this->error("Server API Key not set"); } $fields = array( 'registration_ids' => $this->devices, 'data' => array( "message" => $message ), ); if(is_array($data)){ foreach ($data as $key => $value) { $fields['data'][$key] = $value; } } $headers = array( 'Authorization: key=' . $this->serverApiKey, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $this->url ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); curl_close($ch); return $result; } function error($msg){ echo "Android send notification failed with error:"; echo "\t" . $msg; exit(1); } } if(isset($_POST) && !empty($_POST)){ $apiKey = $_POST["apiKey"]; $devicesToken = explode(",",$_POST["devices"]); $gcpm = new GCMPushMessage($apiKey); $gcpm->setDevices($devicesToken); $title = $_POST["title"]; $message = $_POST["message"];//"Seja bem vindo, José!"; //message o send $response = $gcpm->send($message, array('title' => $title)); //title of the message echo $response; } No teste sem ser pelo scriptcase funciona 100%, mas quando gero o app blank não funciona, já setei os valores no código e sempre da erro. O erro é esse aqui: Fatal error: Class declarations may not be nested in C:\Program Files (x86)\NetMake\v81\wwwroot\scriptcase\app\XXXXXXl\push\index.php on line 1023

Não ficou faltando incluir a chamada da lib do google ?

Desculpe minha ignorância, mas estou começando no scriptcase, como poderia está fazendo isso, pode me dar um passo a passo que eu faço por aqui. É necessário colocar em alguma pasta específica?

é só uma consideração, o que rodou fora do SC, tem um html form que chama o php que executa o envio ?

Rapaz, o meu html está assim:

	<title>Notificações no dispositivo</title>
	
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">

	<!-- Optional theme -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">

	<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
	
	<!-- Latest compiled and minified JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="jumbotron" style="padding:25px">
		<div class="container">
			<h1>PushXDK</h1>
			<p>Sistema de envio de notificações push</p>
		</div>
	</div>
	<div class="container">
		<form method="POST" action="pushAndroid.php">
		  <div class="form-group">
			<label for="apiKey">Chave da API (Cloud Message Service)</label>
			<input type="text" name="apiKey" class="form-control" placeholder="Chave da API para envio de push via serviço de Cloud Message..." required="required"/>
		  </div>
		  <div class="form-group">
			<label for="devices">Dispositivos-alvo (tokens)</label>
			<textarea name="devices" class="form-control" placeholder="Digite o token dos dispotivos-alvo (separados por vírgula)..."></textarea>
		  </div>
		  <div class="form-group">
			<label for="title">Título do push</label>
			<input type="text" name="title" class="form-control" placeholder="Digite o título da mensagem..." required="required"/>
		  </div>
		  <div class="form-group">
			<label for="message">Mensagem do push</label>
			<textarea name="message" class="form-control" placeholder="Digite o conteúdo da mensagem..."></textarea>
		  </div>
		  <button type="submit" class="btn btn-info" style="float:right">ENVIAR PUSH</button>
		</form>
	</div>
</body>

Eu somente passo os valores para o meu push.php não tenho mais nada dentro da pasta, somente esses dois arquivos.

usando o blank que erro que deu ?

agora vendo com a blank tu vai ter que fazer um include , não vai dar pra tu pegar o código e colar dentro porque é uma class,

Agradeço se puder me ajudar. Eu fiz o seguinte:

ferramentas > Bibliotecas internas - setei projeto e fiz upload do arquivo;
depois fui na minha aplicação e adicionei a biblioteca marcando o checkbox;
em um outro app blank eu fiz um sc_include(“push.php”);

Não apareceu nenhum erro, mas também meu celular não recebeu nada.

Att.

Guilherme

seu codigo php do push espera os dados via POST
como ta fazendo isso no SC ? mudou para criar uma lib para passar por parametro para a função push ?

Oi Flavio,

Para não ter que passar via post os dados de chave de api, tokens, titulo e mensagem, eu fiz um teste com esses campos já preenchidos com a informação apenas do meu celular. O que eu queria era algo mais ou menos assim:

Eu tenho no SC uma aplicação que envia postagens para um aplicativo móvel e gostaria de quando inserir uma nova postagem enviar para todos os dispositivos (tokens) a notificação de postagem nova. Para encontrar os tokens eu uso o exemplo do próprio SC e monto uma lista com todos os tokens para passar via post para o campo “devices” da minha classe.

Apenas para testes eu criei uma outra aplicação blank e fiz no onExecute um “sc_include (“push.php”,“prj”);”, mas não estou conseguindo ter resultado com o teste. Poderia se possível montar um exemplo rápido por aqui de como eu poderia efetuar a chamada da classe, e passar os parâmetros para ela?

Att.

Guilherme

se fez o include
pode usar as funções e classes do arquivo do include normalmente

$apiKey = $suavariavel
$devicesToken = explode(",",$seusdevices);
$gcpm = new GCMPushMessage($apiKey);
$gcpm->setDevices($devicesToken);

$title = $seutirulo;
$message = $_POST[“message”];//“Seja bem vindo, José!”; //message o send
$response = $gcpm->send($message, array(‘title’ => $title)); //title of the message

etc…

Obrigado pela ajuda. Amanhã a tarde irei testar e ver se consigo.

E ai deu certo?