Compare commits

...

5 Commits

Author SHA1 Message Date
9432969cb4 Игнорирование отстуствия файлов APNs/FCM при разработке 2026-04-12 23:23:08 +02:00
RoyceDa
f87198c054 Видеосообщения (кружочки) 2026-04-10 17:36:31 +02:00
RoyceDa
58fe3c409d Новый тип вложений - голосовое сообщение
All checks were successful
Build rosetta-wss / build (push) Successful in 1m51s
2026-04-10 17:28:32 +02:00
RoyceDa
bdc44f36f0 Push READ теперь с пустым уведомлением для точного пробуждения
All checks were successful
Build rosetta-wss / build (push) Successful in 1m57s
2026-04-08 22:11:52 +02:00
RoyceDa
145aaf8288 Исправление кика с сервера при гонке с закрытием RTC на SFU
All checks were successful
Build rosetta-wss / build (push) Successful in 1m31s
2026-04-07 15:24:45 +02:00
4 changed files with 28 additions and 6 deletions

View File

@@ -184,9 +184,9 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
} }
if(session == null) { if(session == null) {
/** /**
* Сессии звонка нет * Сессии звонка нет, скорее всего она была удалена при обрыве RTC Peer Connection,
* при срабатывании RTCPeerConnection::close на клиенте раньше, чем клиент отправил сигнал END_CALL
*/ */
client.disconnect(Failures.NO_CALL_SESSION);
return; return;
} }
/** /**

View File

@@ -8,7 +8,9 @@ public enum AttachmentType {
MESSAGES(1), MESSAGES(1),
FILE(2), FILE(2),
AVATAR(3), AVATAR(3),
CALL(4); CALL(4),
VOICE(5),
VIDEO_CIRCLE(6);
private final int code; private final int code;

View File

@@ -19,6 +19,8 @@ import im.rosetta.service.dispatch.runtime.PushType;
public class FCM extends Pusher { public class FCM extends Pusher {
private boolean isInitialized = false;
public FCM() { public FCM() {
initializeFirebase(); initializeFirebase();
} }
@@ -39,8 +41,10 @@ public class FCM extends Pusher {
.setCredentials(GoogleCredentials.fromStream(serviceAccount)) .setCredentials(GoogleCredentials.fromStream(serviceAccount))
.build(); .build();
FirebaseApp.initializeApp(options); FirebaseApp.initializeApp(options);
this.isInitialized = true;
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException("Failed to initialize Firebase", e); this.isInitialized = false;
e.printStackTrace();
} }
} }
} }
@@ -61,9 +65,10 @@ public class FCM extends Pusher {
* Тихий тип уведомления для очистки отправленных уведомлений на устройстве, * Тихий тип уведомления для очистки отправленных уведомлений на устройстве,
* не должен отображаться пользователю, поэтому не задаем звук и ставим contentAvailable для iOS и high priority для Android * не должен отображаться пользователю, поэтому не задаем звук и ставим contentAvailable для iOS и high priority для Android
*/ */
apnsConfig.setAps(Aps.builder().setContentAvailable(true).setSound("default").build()); apnsConfig.setAps(Aps.builder().setContentAvailable(true).setMutableContent(true).build());
androidConfig.setPriority(AndroidConfig.Priority.HIGH); androidConfig.setPriority(AndroidConfig.Priority.HIGH);
messageBuilder.setApnsConfig(apnsConfig.build()); messageBuilder.setApnsConfig(apnsConfig.build());
messageBuilder.setNotification(Notification.builder().setTitle("").setBody("").build());
messageBuilder.setAndroidConfig(androidConfig.build()); messageBuilder.setAndroidConfig(androidConfig.build());
break; break;
case PushType.PERSONAL_MESSAGE: case PushType.PERSONAL_MESSAGE:
@@ -93,6 +98,12 @@ public class FCM extends Pusher {
@Override @Override
public void sendPush(String token, HashMap<String, String> data) { public void sendPush(String token, HashMap<String, String> data) {
if(!this.isInitialized){
/**
* Firebase не инициализирован, пропускаем отправку уведомлений
*/
return;
}
try{ try{
Message message = this.buildMessage(token, data); Message message = this.buildMessage(token, data);
FirebaseMessaging.getInstance().send(message); FirebaseMessaging.getInstance().send(message);

View File

@@ -17,6 +17,7 @@ public class VoIPApns extends Pusher {
private ApnsClient client; private ApnsClient client;
private String topic; private String topic;
private boolean isInitialized = false;
public VoIPApns(){ public VoIPApns(){
this.initializeApns(); this.initializeApns();
@@ -38,13 +39,21 @@ public class VoIPApns extends Pusher {
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST) .setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
.setClientCredentials(new File(p12Path), p12Password) .setClientCredentials(new File(p12Path), p12Password)
.build(); .build();
this.isInitialized = true;
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("Failed to init VoIP APNs client", e); this.isInitialized = false;
e.printStackTrace();
} }
} }
@Override @Override
public void sendPush(String token, HashMap<String, String> data) { public void sendPush(String token, HashMap<String, String> data) {
if(!this.isInitialized) {
/**
* Нет файла для инициализации APNs клиента, пропускаем отправку VoIP уведомлений
*/
return;
}
if(data.get("type") != PushType.CALL) { if(data.get("type") != PushType.CALL) {
/** /**
* Для VoIP APNs отправляем уведомления только о входящих звонках * Для VoIP APNs отправляем уведомления только о входящих звонках