Добавить параметр appKey для FPWCSApi2RoomManagerOptions

Ivan Balychev

New Member
Добрый день. В iOS SDK отсутствует возможность задавать параметр appKey при работе через FPWCSApi2RoomManager.
Параметр appKey присутствует в FPWCSApi2SessionOptions. Однако при работе через FPWCSApi2RoomManager, его никак нельзя задать.

Сейчас в FPWCSApi2RoomManagerOptions есть возможность задать только urlServer/username (и нет возможности пробросить appKey в FPWCSApi2Session, так как FPWCSApi2RoomManager имеет только - (FPWCSApi2Session *) getSession и параметр options (FPWCSApi2SessionOptions) внутри FPWCSApi2Session является приватным.

Objective-C:
@interface FPWCSApi2RoomManagerOptions : NSObject
@property NSString *urlServer;
@property NSString *username;
@end
Так же есть ли возможность добавить возможность добавления для FPWCSApi2RoomManagerOptions возможность добавлять custom parameters (которые присутствуют в FPWCSApi2SessionOptions), сейчас просто пишется login и все (берется из username)

Screenshot 2021-02-19 at 23.03.53.png


@Max
 
Last edited:

Max

Administrator
Staff member
Добрый день.
Добрый день. В iOS SDK отсутствует возможность задавать параметр appKey при работе через FPWCSApi2RoomManager.
Параметр appKey присутствует в FPWCSApi2SessionOptions. Однако при работе через FPWCSApi2RoomManager, его никак нельзя задать.
Это связано с тем, что для RoomApi в принципе невозможно использование собственного бэкенд-приложения, т.к. всю логику комнаты реализует встроенное приложение сервера roomApp. Поэтому и нельзя задать другой ключ приложения.
При необходимости, вы можете переопределить roomApp на собственный URL, но в этом случае все запросы должны проксироваться в стандартное приложение, см пример здесь
Так же есть ли возможность добавить возможность добавления для FPWCSApi2RoomManagerOptions возможность добавлять custom parameters (которые присутствуют в FPWCSApi2SessionOptions), сейчас просто пишется login и все (берется из username)
Такой возможности нет, по причине, указанной выше.
 

Ivan Balychev

New Member
Да в случае с appKey, вопрос не принципиальный. Но вот у нас пример - мы используем другие custom parameters (лежат рядом с login), при подсоединении. И возможность задать их нет. Я сделать swizzling метода setCustom: в FPWCSApi2SessionOptions, и добавил там нужные ключ-значение (проблема решена, но решение такое себе, малоли что поменяется у вас в будущем), но почему нет возможности добавить это в сдк, потому что если вы внутри сдк, вставляете username в ключ login, стало быть можно и другие параметры добавить....
 

Max

Administrator
Staff member
стало быть можно и другие параметры добавить....
Другие параметры добавлять нежелательно, т.к. roomApp на стороне сервера ожидает объект определенного содержания. Эта возможность не реализована ни в одном SDK.
Вы можете сделать полностью свое приложение без использования RoomApi с обменом данными между пользователями и сервером на базе REST hook /OnDataEvent и REST API /data/send
 

Ivan Balychev

New Member
Да, понятно, вопрос был просто больше о возможности такой реализации, в принципе проблема решена с переопределением сеттера.

Code:
@implementation FPWCSApi2SessionOptions (dfsdfsdfs)

+ (void)load {
    
    static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            Class class = [self class];

            SEL originalSelector = @selector(setCustom:);
            SEL swizzledSelector = @selector(xxx_setCustom:);

            Method originalMethod = class_getInstanceMethod(class, originalSelector);
            Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);

            BOOL didAddMethod =
                class_addMethod(class,
                    originalSelector,
                    method_getImplementation(swizzledMethod),
                    method_getTypeEncoding(swizzledMethod));

            if (didAddMethod) {
                class_replaceMethod(class,
                    swizzledSelector,
                    method_getImplementation(originalMethod),
                    method_getTypeEncoding(originalMethod));
            } else {
                method_exchangeImplementations(originalMethod, swizzledMethod);
            }
        });
}

- (void)xxx_setCustom:(NSMutableDictionary*)options {
    
    NSMutableDictionary * data = @{}.mutableCopy;
    
    data[@"token"] = @"custom token";
    
    [self xxx_setCustom:data];
}
 
Top