Flutter firebase Messaging не получает уведомления - PullRequest
0 голосов
/ 22 мая 2019

В настоящее время я работаю над уведомлением о флаттере, используя Firebase Messaging, не могу получить уведомление. Я отправляю уведомление через сервер, используя curl, однако могу заставить его работать в родном приложении для Android (Android Studio), но не во флаттере, любая помощь будет признательна. Ниже мой код.

Код уведомления о флаттере

class FirebaseNotifications {
FirebaseMessaging _firebaseMessaging;

void setUpFirebase() {
_firebaseMessaging = FirebaseMessaging();
firebaseCloudMessaging_Listeners();
}

void firebaseCloudMessaging_Listeners() {
if (Platform.isIOS) iOS_Permission();

_firebaseMessaging.getToken().then((token) {
  print(token);
});

_firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) async {
    print('on message $message');
  },
  onResume: (Map<String, dynamic> message) async {
    print('on resume $message');
  },
  onLaunch: (Map<String, dynamic> message) async {
    print('on launch $message');
  },
);
}

void iOS_Permission() {
_firebaseMessaging.requestNotificationPermissions(
    IosNotificationSettings(sound: true, badge: true, alert: true));
_firebaseMessaging.onIosSettingsRegistered
    .listen((IosNotificationSettings settings) {
  print("Settings registered: $settings");
});
}
}

Код Android Studio

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    Map<String, String> params = remoteMessage.getData();

    JSONObject object = new JSONObject(params);

    showNotification(remoteMessage);
}

private void showNotification(RemoteMessage remoteMessage) { 
Map data = remoteMessage.getData();

String mesg = "New Notification";

Intent intent;
    PendingIntent pendingIntent;
    NotificationCompat.Builder builder;

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

    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel mChannel = new NotificationChannel(id, name, importance);
        mChannel.setDescription(description);
        mChannel.enableLights(true);
        mChannel.setLightColor(Color.GREEN);
        mChannel.enableVibration(true);
        mChannel.setVibrationPattern(new long[]{0, 250, 250, 250});
        mNotificationManager.createNotificationChannel(mChannel);

        builder = new NotificationCompat.Builder(this, id);

        intent = new Intent(this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        builder.setContentTitle(data.get("title").toString())  // required
                //.setStyle(new 
 NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification()
.getBod 
y().toString()))
                .setStyle(new 
NotificationCompat.BigTextStyle().bigText(mesg)) //custom data
                .setSmallIcon(R.drawable.ic_stat_notification_icon4) // 
required

                .setContentText(mesg) // custom data
                .setWhen(System.currentTimeMillis())
                .setDefaults(Notification.DEFAULT_ALL)

.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setAutoCancel(true)
                .setContentIntent(pendingIntent)
                .setVibrate(new long[]{0, 250, 250, 250});
    }
}

Серверный код

function sendtoUser($sendingTarget, $acc_name, $type_message, 
$type_of_transaction, $check_amount)
{

#API access key from Google API's Console
$API_ACCESS_KEY = "adazxc";
$registrationIds = $sendingTarget;
#prep the bundle

$fields = array(
    'to'        => $registrationIds,
    'data' => array(
        'title' => 'my title',
        'keyValue' => true,
        'receiverName' => $acc_name,
        'transType' => $type_of_transaction,
        'totalAmount' => $check_amount
    ),
);

$headers = array(
    'Authorization: key=' . $API_ACCESS_KEY,
    'Content-Type: application/json'
);
#Send Reponse To FireBase Server
$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_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
curl_close($ch);
}

EDIT

Я каким-то образом могу получать уведомления, но я заметил, что моя строка состояния не получает уведомление, но оно печатается в консоли, однако, когда я закрываю приложение, я могу получить уведомление. Так как же я могу получать уведомления в обеих ситуациях?

Ответы [ 3 ]

0 голосов
/ 22 мая 2019

Некоторые проверки (номера версий могут измениться):

  • Добавьте google-services.json (Загрузить с консоли Firebase) в Android / приложение /

В Android / build.gradle:

  • Добавить Google () в репозитории
  • Добавить classpath 'com.google.gms: google-services: 4.2.0' к зависимостям

В android / app / build.gradle:

  • Добавить реализацию 'com.google.firebase: firebase-messaging: 18.0.0' в Зависимости
  • Добавьте подключаемый плагин: «com.google.gms.google-services» в конце
  • Приложение должно быть таким же, как имя_пакета в google-services.jon
0 голосов
/ 18 июня 2019

data тег только для передачи дополнительной информации в приложение, например, где оно должно быть перенаправлено, изображение и т. Д. Вы должны добавить тег notification для отображения уведомления в строке состояния.

кажется, что вы не добавили уведомления, пожалуйста, обратитесь к образцу сообщения ниже и настройте то же самое, оно будет работать

{
   "notification": {
      "body": "body",
      "title": "title"
   },
   "priority": "high",
   "data": {
      "click_action": "FLUTTER_NOTIFICATION_CLICK",
      "id": "1",
      "status": "done",
      "image": "https://ibin.co/2t1lLdpfS06F.png",
   },
   "to": <fcm_token>
}
0 голосов
/ 22 мая 2019

Вы можете пропустить ручную настройку для Android (а также IOS, если требуется), см. Ссылку ниже

http://myhexaville.com/2018/04/09/flutter-push-notifications-with-firebase-cloud-messaging/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...