2017-09-01 80 views
0

我正在实现firebase云消息传递,以在满足表行数据条件时从mysql数据库接收通知。我现在拥有的只是一个简单的推送通知,当我使用浏览器输入一个php文件。以下是我的所有编码。当条件设置时,Android fcm接收来自mysql的通知

push_notification.php

<?php 

function send_notification ($tokens, $message) 
{ 
    $url = 'https://fcm.googleapis.com/fcm/send'; 

    $fields = array(
     'registration_ids' => $tokens, 
     'data' => $message 
     ); 

    $headers = array(
     'Authorization:key = AAAA0********* ', 
     'Content-Type: application/json' 
     ); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
    $result = curl_exec($ch);  

    if ($result === FALSE) { 
     die('Curl failed: ' . curl_error($ch)); 
    } 

    curl_close($ch); 
    return $result; 
} 

$conn = mysqli_connect("localhost", "root", "", "fcm"); 
$sql = " Select fcm_token From fcm_notification"; 
$result = mysqli_query($conn, $sql); 
$tokens = array(); 

if(mysqli_num_rows($result) > 0){ 
    while ($row = mysqli_fetch_assoc($result)) { 
     $tokens[] = $row["fcm_token"]; 
    } 
} 

mysqli_close($conn); 
$message = array("message" => " FCM PUSH NOTIFICATION TEST MESSAGE"); 
$message_status = send_notification($tokens, $message); 
echo $message_status; 

?> 

MyFirebaseInstanceIDService.java

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 

@Override 
public void onTokenRefresh() { 

    String token = FirebaseInstanceId.getInstance().getToken(); 

    registerToken(token); 
} 

private void registerToken(String token) { 

    OkHttpClient client = new OkHttpClient(); 
    RequestBody body = new FormBody.Builder() 
      .add("fcm_token", token) 
      .build(); 

    Request request = new Request.Builder() 
      .url("http://192.168.1.5/fcm/register.php") 
      .post(body) 
      .build(); 

    try { 
     client.newCall(request).execute(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

} 

MyFirebaseMessagingService.java

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 

    showNotification(remoteMessage.getData().get("message")); 
} 

private void showNotification(String message) { 

    Intent i = new Intent(this,MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setAutoCancel(true) 
      .setContentTitle("FCM Test") 
      .setContentText(message) 
      .setLights(Color.BLUE,1,1) 
      .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) 
      .setContentIntent(pendingIntent); 

    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(0,builder.build()); 
} 
} 

fcm_token表

token

眼下我如何能够接收来自MySQL数据库的通知,当用户balance小于0.5,这是我user

user table

回答

0

您已经建立了足够的系统来完成发送和接收推送通知的基本功能。

从我得到的是,你有一个系统,当用户余额小于0.5时,你想发送推送通知。您可以使用PHP编写代码,其中有平衡操作来检查用户的当前余额并发送推送通知。

OR

您可以设置一个cron检查每个用户的平衡,并将它们发送通知,如果有余额小于0.5

+0

我听说过cron作业,但我不知道如何使用它,也许我不打算使用它。我如何在PHP中编写代码?我从来没有这样做过,你能告诉我第一步吗? – lolol