Во-первых, я искал, но я не получил результата с 2017/2018, и некоторые вещи устарели.
Я пытался отправить уведомление для программы с php.У меня есть этот php (send_notification), но с 2016 года. Я уже получил токен для БД и был сохранен в tokens.tokens.Я думаю, что отправка данных с php не достаточно, потому что когда я изменил построитель уведомлений, теперь он говорит, что вам нужно указать idchannel (последний устарел)
manager.notify(1,notificationBuilder.build());
и когда я передаю информацию ($поля)
$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;
Канал не указан.
Обновление: я получаю сообщение, если отправляю его из Интернета, только если оно спит.Я попытался с тестом и отправив в тестовый раздел и канал 1, и я получил его оба, так что я почти уверен, что ошибка должна быть на php и, возможно, на предмете curl, который я отметил в начале.
Теперь я добавлю код, чтобы, возможно, кто-то мог помочь.
FirebaseMessagingService
package com.example.android.fcmtest;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.firebase.messaging.RemoteMessage;
import androidx.core.app.NotificationCompat;
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
WebService ws;
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Log.d("NEW_TOKEN",token);
Context context = this;
ws.registrarTokenWebService(token, context);
}
@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);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "M_CH_ID")
.setAutoCancel(true)
.setContentTitle("FCM Test")
.setContentText(message)
.setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(1,notificationBuilder.build());
}
}
Основная деятельность
package com.example.android.fcmtest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
import com.google.firebase.messaging.FirebaseMessaging;
public class MainActivity extends AppCompatActivity {
WebService ws;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ws = new WebService();
FirebaseMessaging.getInstance().subscribeToTopic("test");
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String deviceToken = instanceIdResult.getToken();
ws.registrarTokenWebService(deviceToken, MainActivity.this);
}
});
}
}
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 = -auth key-',
'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;
}
$hostname_localhost ="localhost";
$username_localhost ="root";
$password_localhost ="";
$database_localhost ="tn";
$conn = mysqli_connect ($hostname_localhost, $username_localhost, $password_localhost, $database_localhost);
$sql = "SELECT tokens.tokens FROM tokens";
$result = mysqli_query($conn,$sql);
$tokens = array();
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$tokens[] = $row["tokens"];
}
}
mysqli_close($conn);
$message = array("message" => " FCM PUSH NOTIFICATION TEST MESSAGE");
$message_status = send_notification($tokens, $message);
echo $message_status;
?>
С тех пор, мои пожелания.