私はインスタントメッセージングのためにAndroidアプリケーションでFirebaseMessagingを使用します。FirebaseMessaging Androidいくつかのメッセージが失われる
サーバーからデバイスへのメッセージの場合は、メッセージが失われることはありません。
しかし、モバイルからの一部のメッセージが失われたサーバーへ
...サーバーは、ACKメッセージを受信しますが、他の方向(サーバーへのモバイル)モバイルはACKを受信しません。
結果として、メッセージの約30%が失われています。複数のメッセージをすばやく送信すると、より多くの損失(40〜60%)が発生します。ゆっくりと複数のメッセージを送信すると、メッセージが10%失われてしまいます。
メッセージをモバイルに送信すると、FirebaseMessagingServiceに「onMessageSent」というメソッドが10メッセージの曖昧さによって呼び出されました。それは普通ですか? "onMessageSentは" かつてのようにすぐにメッセージが送信されたと呼ばれていないのはなぜ...
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
/** constante pour renvoyer la position GPS */
public static final String BROADCAST_FIREBASE_FILTER= "android.intent.action.MY_APP_FIREBASE";
private DatabaseHelper helper;
@Override
public void onCreate() {
super.onCreate();
}
/**
* Called when message is received.
*
* @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
*/
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Notification method below.
DebugLog.logw(TAG,"MESSAGE RECEIVED");
String clickAction = remoteMessage.getNotification().getClickAction();
[..]
}
// [END receive_message]
/**
* Create and show a simple notification containing the received FCM message.
*
* @param messageBody FCM message body received.
*/
private void sendNotification(String title, String messageBody,Intent intent2) {
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent2,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
@Override
public void onDeletedMessages() {
super.onDeletedMessages();
DebugLog.logi(TAG, "onDeletedMessages");
}
@Override
public void onMessageSent(String s) {
super.onMessageSent(s);
DebugLog.logi(TAG, "onMessageSent = " + s);
}
@Override
public void onSendError(String s, Exception e) {
super.onSendError(s, e);
DebugLog.logi(TAG, "onSendError = " + s);
}
}
私FragmentMessagingで私の方法のメッセージ送信のために:
public void sendMessage(Message msg){
DebugLog.logd("FragmentMessagerie","sendMessage msg = " + msg.getMsg());
if(textMessage.getText().length()>0) {
final Message message = msg;
AtomicInteger atomicInteger = new AtomicInteger();
FirebaseMessaging fm = FirebaseMessaging.getInstance();
RemoteMessage rm = new RemoteMessage.Builder(senderID)
.setMessageId("myApp_" + atomicInteger.incrementAndGet() + System.currentTimeMillis())
.addData("action", "chat")
.addData("destinataire", String.valueOf(contact.getId()))
.addData("emetteur",username)
.addData("texte",msg.getMsg())
.setTtl(0)
.build();
fm.send(rm); // appel à fireBase pour l'envoi du message
[..]
textMessage.setText("");
} else {
[..]
}
}
}
を私の質問は:
送信時メッセージ(firebaseMessaging.send(remoteMessage))Firebaseは、サーバへのメッセージの送信を処理することになっています。
メッセージをFirebaseに間違って送信するAndroidですか?
また、私のサーバーにメッセージを悪く送信するFirebaseですか?
サーバー上では、モバイルに送信されたACKメッセージを受信します。
私のデバイスのAndroidでは、「10メッセージが送信されたときに、メソッド "onMessageSent"だけが呼び出されました...これは正常ですか?
AndroidデバイスからサーバーデバイスへのメッセージのACKを受信するにはどうすればよいですか?私のデバイスから?
ご協力いただきありがとうございます。