Use flexiapi account creator

This commit is contained in:
QuentinArguillere 2023-07-11 17:04:15 +02:00
parent 0f1ab8bf37
commit 9509f2652f
8 changed files with 194 additions and 66 deletions

View file

@ -62,11 +62,13 @@
} }
linphone_account_creator_set_user_data(account_creator, (__bridge void *)(self)); linphone_account_creator_set_user_data(account_creator, (__bridge void *)(self));
linphone_account_creator_cbs_set_link_account(linphone_account_creator_get_callbacks(account_creator),
assistant_link_phone_number_with_account); LinphoneAccountCreatorCbs * cbs = linphone_factory_create_account_creator_cbs(linphone_factory_get());
linphone_account_creator_cbs_set_activate_alias(linphone_account_creator_get_callbacks(account_creator), linphone_account_creator_cbs_set_link_account(cbs, assistant_link_phone_number_with_account);
assistant_activate_phone_number_link); linphone_account_creator_cbs_set_activate_alias(cbs, assistant_activate_phone_number_link);
linphone_account_creator_add_callbacks(account_creator, cbs);
linphone_account_creator_cbs_unref(cbs);
LinphoneAccount *acc = linphone_core_get_default_account(LC); LinphoneAccount *acc = linphone_core_get_default_account(LC);
LinphoneAccountParams const *accParams = (acc) ? linphone_account_get_params(acc) : NULL; LinphoneAccountParams const *accParams = (acc) ? linphone_account_get_params(acc) : NULL;
if (acc && if (acc &&

View file

@ -33,6 +33,7 @@
size_t number_of_accounts_before; size_t number_of_accounts_before;
BOOL mustRestoreView; BOOL mustRestoreView;
long phone_number_length; long phone_number_length;
BOOL receivedAuthToken;
} }
@property(nonatomic) UICompositeViewDescription *outgoingView; @property(nonatomic) UICompositeViewDescription *outgoingView;

View file

@ -28,6 +28,13 @@
#import "UIAssistantTextField.h" #import "UIAssistantTextField.h"
#import "UITextField+DoneButton.h" #import "UITextField+DoneButton.h"
#import "LinphoneAppDelegate.h" #import "LinphoneAppDelegate.h"
#import "SVProgressHUD.h"
#ifdef DEBUG
#define PROVIDER_NAME "apns.dev"
#else
#define PROVIDER_NAME "apns"
#endif
typedef enum _ViewElement { typedef enum _ViewElement {
ViewElement_Username = 100, ViewElement_Username = 100,
@ -94,7 +101,7 @@ static UICompositeViewDescription *compositeDescription = nil;
- (IBAction)onContactTap { - (IBAction)onContactTap {
NSString *url = @"https://www.linphone.org/contact"; NSString *url = @"https://www.linphone.org/contact";
if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) { if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) {
LOGE(@"Failed to open %@, invalid URL", url); LOGE(@"[Assistant] Failed to open %@, invalid URL", url);
} }
} }
@ -118,12 +125,10 @@ static UICompositeViewDescription *compositeDescription = nil;
selector:@selector(configuringUpdate:) selector:@selector(configuringUpdate:)
name:kLinphoneConfiguringStateUpdate name:kLinphoneConfiguringStateUpdate
object:nil]; object:nil];
if (!account_creator) { [NSNotificationCenter.defaultCenter addObserver:self
account_creator = linphone_account_creator_new( selector:@selector(onAccountAuthenticationTokenReception:)
LC, name:kLinphoneAccountCreationAuthenticationTokenReceived
[LinphoneManager.instance lpConfigStringForKey:@"xmlrpc_url" inSection:@"assistant" withDefault:@""] object:nil];
.UTF8String);
}
if (!mustRestoreView) { if (!mustRestoreView) {
new_account = NULL; new_account = NULL;
@ -185,6 +190,10 @@ static UICompositeViewDescription *compositeDescription = nil;
#pragma mark - Utils #pragma mark - Utils
- (void)resetLiblinphone:(BOOL)core { - (void)resetLiblinphone:(BOOL)core {
//reset for test
[LinphoneManager.instance lpConfigSetString:@"" forKey:@"account_creation_token" inSection:@"app"];
if (account_creator) { if (account_creator) {
linphone_account_creator_unref(account_creator); linphone_account_creator_unref(account_creator);
account_creator = NULL; account_creator = NULL;
@ -196,21 +205,25 @@ static UICompositeViewDescription *compositeDescription = nil;
LC, [LinphoneManager.instance lpConfigStringForKey:@"xmlrpc_url" inSection:@"assistant" withDefault:@""] LC, [LinphoneManager.instance lpConfigStringForKey:@"xmlrpc_url" inSection:@"assistant" withDefault:@""]
.UTF8String); .UTF8String);
linphone_account_creator_set_user_data(account_creator, (__bridge void *)(self)); linphone_account_creator_set_user_data(account_creator, (__bridge void *)(self));
linphone_account_creator_cbs_set_is_account_exist(linphone_account_creator_get_callbacks(account_creator),
assistant_is_account_used);
linphone_account_creator_cbs_set_create_account(linphone_account_creator_get_callbacks(account_creator),
assistant_create_account);
linphone_account_creator_cbs_set_activate_account(linphone_account_creator_get_callbacks(account_creator),
assistant_activate_account);
linphone_account_creator_cbs_set_is_account_activated(linphone_account_creator_get_callbacks(account_creator),
assistant_is_account_activated);
linphone_account_creator_cbs_set_recover_account(linphone_account_creator_get_callbacks(account_creator),
assistant_recover_phone_account);
linphone_account_creator_cbs_set_is_account_linked(linphone_account_creator_get_callbacks(account_creator),
assistant_is_account_linked);
linphone_account_creator_cbs_set_login_linphone_account(linphone_account_creator_get_callbacks(account_creator), assistant_login_linphone_account);
LinphoneAccountCreatorCbs * cbs = linphone_factory_create_account_creator_cbs(linphone_factory_get());
linphone_account_creator_cbs_set_is_account_exist(cbs, assistant_is_account_used);
linphone_account_creator_cbs_set_create_account(cbs, assistant_create_account);
linphone_account_creator_cbs_set_activate_account(cbs, assistant_activate_account);
linphone_account_creator_cbs_set_is_account_activated(cbs,
assistant_is_account_activated);
linphone_account_creator_cbs_set_recover_account(cbs,
assistant_recover_phone_account);
linphone_account_creator_cbs_set_is_account_linked(cbs,
assistant_is_account_linked);
linphone_account_creator_cbs_set_login_linphone_account(cbs, assistant_login_linphone_account);
linphone_account_creator_cbs_set_send_token(cbs, assistant_request_auth_token_cb);
linphone_account_creator_add_callbacks(account_creator, cbs);
linphone_account_creator_cbs_unref(cbs);
} }
- (void)loadAssistantConfig:(NSString *)rcFilename { - (void)loadAssistantConfig:(NSString *)rcFilename {
linphone_core_load_config_from_xml(LC, linphone_core_load_config_from_xml(LC,
[LinphoneManager bundleFile:rcFilename].UTF8String); [LinphoneManager bundleFile:rcFilename].UTF8String);
@ -304,7 +317,12 @@ static UICompositeViewDescription *compositeDescription = nil;
return NSLocalizedString(@"There is no network connection available, enable " return NSLocalizedString(@"There is no network connection available, enable "
@"WIFI or WWAN prior to configure an account.", @"WIFI or WWAN prior to configure an account.",
nil); nil);
if IS(ERROR_PUSH_UNAVAILABLE)
return NSLocalizedString(@"Push parameters are not available, and are required in order to create an account through an iPhone.\n Please enable them or create your account on https://subscribe.linphone.org", nil);
if IS(ERROR_AUTH_TOKEN_NOT_RECEIVED)
return NSLocalizedString(@"Failed to get an auth token from account manager server", nil);
return NSLocalizedString(@"Unknown error, please try again later.", nil); return NSLocalizedString(@"Unknown error, please try again later.", nil);
} }
@ -514,11 +532,6 @@ static UICompositeViewDescription *compositeDescription = nil;
linphone_address_unref(identity); linphone_address_unref(identity);
LinphonePushNotificationConfig *pushConfig = linphone_account_params_get_push_notification_config(accountParams); LinphonePushNotificationConfig *pushConfig = linphone_account_params_get_push_notification_config(accountParams);
#ifdef DEBUG
#define PROVIDER_NAME "apns.dev"
#else
#define PROVIDER_NAME "apns"
#endif
linphone_push_notification_config_set_provider(pushConfig, PROVIDER_NAME); linphone_push_notification_config_set_provider(pushConfig, PROVIDER_NAME);
if (strcmp(creatorDomain, "sip.linphone.org")==0) { if (strcmp(creatorDomain, "sip.linphone.org")==0) {
@ -690,6 +703,34 @@ static UICompositeViewDescription *compositeDescription = nil;
// every UITextField subviews with phone keyboard must be tweaked to have a done button // every UITextField subviews with phone keyboard must be tweaked to have a done button
[self addDoneButtonRecursivelyInView:self.view]; [self addDoneButtonRecursivelyInView:self.view];
[self prepareErrorLabels]; [self prepareErrorLabels];
if (view == _createAccountView) {
NSString *token = [LinphoneManager.instance lpConfigStringForKey:@"account_creation_token" inSection:@"app" withDefault:@""];
if ([token length] > 0) {
linphone_account_creator_set_token(account_creator, [token UTF8String]);
LOGI(@"[Assistant] Account creation token already available, saving it in the account creator");
} else {
const LinphonePushNotificationConfig * core_push_config = linphone_core_get_push_notification_config(LC);
linphone_account_creator_set_pn_provider(account_creator, PROVIDER_NAME);
//extract ".remote" from core pn_param which is of the form : VABCD1234.org.linphone.phone.voip&remote
NSString *formatedPnParam = [NSString stringWithUTF8String:linphone_push_notification_config_get_param(core_push_config)];
formatedPnParam = [formatedPnParam stringByReplacingOccurrencesOfString:@"voip&remote" withString:@"remote"];
linphone_account_creator_set_pn_param(account_creator, [formatedPnParam UTF8String]);
//extract REMOTETOKENID from core pn_prid which is of the form : VOIPTOKENID:voip&REMOTETOKENID:remote
const char* core_remote_token = linphone_push_notification_config_get_remote_token(core_push_config);
NSString *formatedRemoteToken=@"";
if (core_remote_token) {
formatedRemoteToken = [[NSString stringWithUTF8String:core_remote_token] substringToIndex:64];
linphone_account_creator_set_pn_prid(account_creator, [formatedRemoteToken UTF8String]);
} else {
LOGW(@"[Assistant] - No remote push token available in core for account creator configuration");
[self showErrorPopup:"ERROR_PUSH_UNAVAILABLE"];
}
LOGI(@"[Assistant] Found push notification info: provider [%s], param [%@] and prid [%@]", PROVIDER_NAME, formatedPnParam, formatedRemoteToken);
}
}
} }
- (void)addDoneButtonRecursivelyInView:(UIView *)subview { - (void)addDoneButtonRecursivelyInView:(UIView *)subview {
@ -1020,7 +1061,7 @@ static UICompositeViewDescription *compositeDescription = nil;
MSList *accounts = [LinphoneManager.instance createAccountsNotHiddenList]; MSList *accounts = [LinphoneManager.instance createAccountsNotHiddenList];
if (number_of_accounts_before < bctbx_list_size(accounts)) { if (number_of_accounts_before < bctbx_list_size(accounts)) {
LOGI(@"A proxy config was set up with the remote provisioning, skip assistant"); LOGI(@"[Assistant] A proxy config was set up with the remote provisioning, skip assistant");
[self onDialerClick:nil]; [self onDialerClick:nil];
} }
bctbx_free(accounts); bctbx_free(accounts);
@ -1056,7 +1097,15 @@ static UICompositeViewDescription *compositeDescription = nil;
} }
} }
- (void)onAccountAuthenticationTokenReception:(NSNotification *)notif {
receivedAuthToken = TRUE;
NSString *token = [LinphoneManager.instance lpConfigStringForKey:@"account_creation_token" inSection:@"app"];
linphone_account_creator_set_token(account_creator, [token UTF8String]);
linphone_account_creator_is_account_exist(account_creator);
}
- (void)showErrorPopup:(const char *)error { - (void)showErrorPopup:(const char *)error {
[SVProgressHUD dismiss];
const char *err = error ? error : ""; const char *err = error ? error : "";
if (strcmp(err, "ERROR_BAD_CREDENTIALS") == 0) { if (strcmp(err, "ERROR_BAD_CREDENTIALS") == 0) {
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Connection failure", nil) UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Connection failure", nil)
@ -1134,6 +1183,28 @@ static UICompositeViewDescription *compositeDescription = nil;
defaultAction.accessibilityLabel = @"PopUpResp"; defaultAction.accessibilityLabel = @"PopUpResp";
[errView addAction:defaultAction]; [errView addAction:defaultAction];
[self presentViewController:errView animated:YES completion:nil]; [self presentViewController:errView animated:YES completion:nil];
} else if (strcmp(err, "ERROR_PUSH_UNAVAILABLE") == 0) {
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Push unavailable", nil)
message:[AssistantView StringForXMLRPCError:err]
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[errView addAction:defaultAction];
defaultAction.accessibilityLabel = @"PopUpResp";
[self presentViewController:errView animated:YES completion:nil];
} else if (strcmp(err, "ERROR_AUTH_TOKEN_NOT_RECEIVED") == 0) {
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Authentication token error", nil)
message:[AssistantView StringForXMLRPCError:err]
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[errView addAction:defaultAction];
defaultAction.accessibilityLabel = @"PopUpResp";
[self presentViewController:errView animated:YES completion:nil];
} else { } else {
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Account configuration issue", nil) UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Account configuration issue", nil)
message:[AssistantView StringForXMLRPCError:err] message:[AssistantView StringForXMLRPCError:err]
@ -1225,6 +1296,7 @@ void assistant_create_account(LinphoneAccountCreator *creator, LinphoneAccountCr
AssistantView *thiz = (__bridge AssistantView *)(linphone_account_creator_get_user_data(creator)); AssistantView *thiz = (__bridge AssistantView *)(linphone_account_creator_get_user_data(creator));
thiz.waitView.hidden = YES; thiz.waitView.hidden = YES;
if (status == LinphoneAccountCreatorStatusAccountCreated) { if (status == LinphoneAccountCreatorStatusAccountCreated) {
[SVProgressHUD dismiss];
if (linphone_account_creator_get_phone_number(creator)) { if (linphone_account_creator_get_phone_number(creator)) {
NSString* phoneNumber = [NSString stringWithUTF8String:linphone_account_creator_get_phone_number(creator)]; NSString* phoneNumber = [NSString stringWithUTF8String:linphone_account_creator_get_phone_number(creator)];
thiz.activationSMSText.text = [NSString stringWithFormat:NSLocalizedString(@"We have sent a SMS with a validation code to %@. To complete your phone number verification, please enter the 4 digit code below:", nil), phoneNumber]; thiz.activationSMSText.text = [NSString stringWithFormat:NSLocalizedString(@"We have sent a SMS with a validation code to %@. To complete your phone number verification, please enter the 4 digit code below:", nil), phoneNumber];
@ -1271,6 +1343,24 @@ void assistant_activate_account(LinphoneAccountCreator *creator, LinphoneAccount
} }
} }
void assistant_request_auth_token_cb(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status,
const char *resp) {
AssistantView *thiz = (__bridge AssistantView *)(linphone_account_creator_get_user_data(creator));
if (status == LinphoneAccountCreatorStatusMissingArguments) {
[thiz showErrorPopup:"ERROR_PUSH_UNAVAILABLE"];
} else if (status == LinphoneAccountCreatorStatusUnexpectedError) {
UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Unknown error", nil)
message:NSLocalizedString(@"Failed to request an authentication token from account manager", nil)
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[errView addAction:defaultAction];
[thiz presentViewController:errView animated:YES completion:nil];
}
}
void assistant_login_linphone_account(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status, void assistant_login_linphone_account(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status,
const char *resp) { const char *resp) {
AssistantView *thiz = (__bridge AssistantView *)(linphone_account_creator_get_user_data(creator)); AssistantView *thiz = (__bridge AssistantView *)(linphone_account_creator_get_user_data(creator));
@ -1442,7 +1532,31 @@ UIColor *previousColor = (UIColor*)[sender backgroundColor]; \
ONCLICKBUTTON(sender, 100, { ONCLICKBUTTON(sender, 100, {
_activationTitle.text = @"CREATE ACCOUNT"; _activationTitle.text = @"CREATE ACCOUNT";
_waitView.hidden = NO; _waitView.hidden = NO;
linphone_account_creator_is_account_exist(account_creator);
UIAssistantTextField *createUsername = [self findTextField:ViewElement_Username];
if ([createUsername.text length] == 0) {
linphone_account_creator_set_username(account_creator, linphone_account_creator_get_phone_number(account_creator));
}
if (linphone_account_creator_get_token(account_creator)) {
linphone_account_creator_is_account_exist(account_creator);
} else {
[SVProgressHUD show];
receivedAuthToken = FALSE;
LinphoneAccountCreatorStatus requestStatus = linphone_account_creator_request_auth_token(account_creator);
if (requestStatus == LinphoneAccountCreatorStatusRequestOk) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (!receivedAuthToken) {
[self showErrorPopup:"ERROR_AUTH_TOKEN_NOT_RECEIVED"];
[SVProgressHUD dismiss];
}
});
} else {
[self showErrorPopup:"ERROR_PUSH_UNAVAILABLE"];
}
}
}); });
} }
} }
@ -1454,22 +1568,21 @@ UIColor *previousColor = (UIColor*)[sender backgroundColor]; \
account_creator, account_creator,
((UITextField *)[self findView:ViewElement_SMSCode inView:_contentView ofType:UITextField.class]) ((UITextField *)[self findView:ViewElement_SMSCode inView:_contentView ofType:UITextField.class])
.text.UTF8String); .text.UTF8String);
if (linphone_account_creator_get_password(account_creator) == NULL &&
linphone_account_creator_get_ha1(account_creator) == NULL) { if ([_activationTitle.text isEqualToString:@"USE LINPHONE ACCOUNT"]) {
if ([_activationTitle.text isEqualToString:@"USE LINPHONE ACCOUNT"]) { linphone_account_creator_login_linphone_account(account_creator);
linphone_account_creator_login_linphone_account(account_creator);
} else {
linphone_account_creator_activate_account(account_creator);
}
} else { } else {
linphone_account_creator_activate_account(account_creator);
} /* else {
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
linphone_account_creator_set_language(account_creator, [[language substringToIndex:2] UTF8String]); linphone_account_creator_set_language(account_creator, [[language substringToIndex:2] UTF8String]);
linphone_account_creator_link_account(account_creator); linphone_account_creator_link_account(account_creator);
linphone_account_creator_activate_alias(account_creator); linphone_account_creator_activate_alias(account_creator);
} } */
}); });
} }
- (IBAction)onCreateAccountCheckActivatedClick:(id)sender { - (IBAction)onCreateAccountCheckActivatedClick:(id)sender {
ONCLICKBUTTON(sender, 100, { ONCLICKBUTTON(sender, 100, {
_waitView.hidden = NO; _waitView.hidden = NO;
@ -1785,7 +1898,7 @@ UIColor *previousColor = (UIColor*)[sender backgroundColor]; \
- (IBAction)onLinkTap:(id)sender { - (IBAction)onLinkTap:(id)sender {
NSString *url = @"https://subscribe.linphone.org"; NSString *url = @"https://subscribe.linphone.org";
if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) { if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) {
LOGE(@"Failed to open %@, invalid URL", url); LOGE(@"[Assistant] Failed to open %@, invalid URL", url);
} }
} }

View file

@ -572,30 +572,38 @@
-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
LOGD(@"didReceiveRemoteNotification -- backgroundPush"); LOGD(@"didReceiveRemoteNotification -- backgroundPush");
if (linphone_core_get_global_state(LC) != LinphoneGlobalOn) {
[LinphoneManager.instance startLinphoneCore];
[LinphoneManager.instance.fastAddressBook reloadFriends];
}
const MSList *accounts = linphone_core_get_account_list(LC); NSDictionary *customPayload = [userInfo objectForKey:@"customPayload"];
while (accounts) { if (customPayload && [customPayload objectForKey:@"token"]) {
LinphoneAccount *account = (LinphoneAccount *)accounts->data; [LinphoneManager.instance lpConfigSetString:[customPayload objectForKey:@"token"] forKey:@"account_creation_token" inSection:@"app"];
linphone_account_refresh_register(account); [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneAccountCreationAuthenticationTokenReceived object:nil];
accounts = accounts->next;
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:kLinphoneMsgNotificationAppGroupId];
NSMutableDictionary *chatroomsPushStatus = [[NSMutableDictionary alloc] initWithDictionary:[defaults dictionaryForKey:@"appactive"]];
if ([defaults boolForKey:@"appactive"] != TRUE) {
linphone_core_enter_background(LC);
if (linphone_core_get_calls_nb(LC) == 0) {
linphone_core_stop(LC);
}
}
completionHandler(UIBackgroundFetchResultNewData); completionHandler(UIBackgroundFetchResultNewData);
}); } else {
if (linphone_core_get_global_state(LC) != LinphoneGlobalOn) {
[LinphoneManager.instance startLinphoneCore];
[LinphoneManager.instance.fastAddressBook reloadFriends];
}
const MSList *accounts = linphone_core_get_account_list(LC);
while (accounts) {
LinphoneAccount *account = (LinphoneAccount *)accounts->data;
linphone_account_refresh_register(account);
accounts = accounts->next;
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:kLinphoneMsgNotificationAppGroupId];
NSMutableDictionary *chatroomsPushStatus = [[NSMutableDictionary alloc] initWithDictionary:[defaults dictionaryForKey:@"appactive"]];
if ([defaults boolForKey:@"appactive"] != TRUE) {
linphone_core_enter_background(LC);
if (linphone_core_get_calls_nb(LC) == 0) {
linphone_core_stop(LC);
}
}
completionHandler(UIBackgroundFetchResultNewData);
});
}
} }
- (void)userNotificationCenter:(UNUserNotificationCenter *)center - (void)userNotificationCenter:(UNUserNotificationCenter *)center

View file

@ -67,6 +67,7 @@ extern NSString *const kLinphoneMagicSearchStarted;
extern NSString *const kLinphoneMagicSearchFinished; extern NSString *const kLinphoneMagicSearchFinished;
extern NSString *const kLinphoneMagicSearchMoreAvailable; extern NSString *const kLinphoneMagicSearchMoreAvailable;
extern NSString *const kDisplayModeChanged; extern NSString *const kDisplayModeChanged;
extern NSString *const kLinphoneAccountCreationAuthenticationTokenReceived;
extern NSString *const kLinphoneMsgNotificationAppGroupId; extern NSString *const kLinphoneMsgNotificationAppGroupId;

View file

@ -83,6 +83,7 @@ NSString *const kLinphoneMagicSearchStarted = @"LinphoneMagicSearchStarted";
NSString *const kLinphoneMagicSearchFinished = @"LinphoneMagicSearchFinished"; NSString *const kLinphoneMagicSearchFinished = @"LinphoneMagicSearchFinished";
NSString *const kLinphoneMagicSearchMoreAvailable = @"LinphoneMagicSearchMoreAvailable"; NSString *const kLinphoneMagicSearchMoreAvailable = @"LinphoneMagicSearchMoreAvailable";
NSString *const kDisplayModeChanged = @"DisplayModeChanged"; NSString *const kDisplayModeChanged = @"DisplayModeChanged";
NSString *const kLinphoneAccountCreationAuthenticationTokenReceived = @"LinphoneAccountCreationAuthenticationTokenReceived";
NSString *const kLinphoneMsgNotificationAppGroupId = @"group.org.linphone.phone.msgNotification"; NSString *const kLinphoneMsgNotificationAppGroupId = @"group.org.linphone.phone.msgNotification";

View file

@ -111,4 +111,4 @@ show_local=0
size=vga size=vga
[account_creator] [account_creator]
backend=0 backend=1

View file

@ -51,7 +51,9 @@ prefer_basic_chat_room=-1
eq_location=mic eq_location=mic
[account_creator] [account_creator]
backend=0 backend=1
url=https://subscribe.linphone.org/api/
# TODO: replace above URL by https://subscribe.linphone.org/api/
[video] [video]
max_conference_size=vga max_conference_size=vga