PJSIP拨打电话库:VialerSIPLib,这个应该是Github上能找到上手门槛比较低并且比较强大的PJSIP库了。
0、运行GitHub上VialerSIPLib的Demo
0.1、clone 或 下载zip,然后pod install
0.2、修改Keys.swift.example
文件名为Keys.swift
,并为Keys.swift
中的属性赋值
可能会出现错误
PJSUA_IP_CHANGE_OP_COMPLETED 未定义
,将VSLEndpoint.m
中这段代码注释了即可
// case PJSUA_IP_CHANGE_OP_COMPLETED: {
// VSLLogDebug(@"The ip change process has completed, status: %s", statusmsg);
// [VSLEndpoint sharedEndpoint].ipChangeInProgress = NO;
// break;
// }
1、集成
pod 'VialerSIPLib', "3.7.3"
1.1、同时添加一下代码
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'PJ_AUTOCONF=1'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
end
end
end
1.2、如果Podfile
文件中使用了use_frameworks!
,需添加一下代码。否则会报“The ‘Pods-XXX‘ target has transitive dependencies that include statically linked binaries”
pre_install do |installer|
# workaround for https://github.com/CocoaPods/CocoaPods/issues/3289
Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
end
2、使用
2.1、配置VialerSIPLib
- (void)configureVialerSIPLib
{
VSLEndpointConfiguration *endpointConfiguration = [[VSLEndpointConfiguration alloc] init];
VSLTransportConfiguration *updTransportConfiguration = [VSLTransportConfiguration configurationWithTransportType:VSLTransportTypeUDP];
endpointConfiguration.transportConfigurations = @[updTransportConfiguration];
NSError *error;
BOOL success = [[VialerSIPLib sharedInstance] configureLibraryWithEndPointConfiguration:endpointConfiguration error:&error];
if (!success || error) {
NSLog(@"Failed to startup VialerSIPLib: %@", error);
}
}
2.2、注册SIP账号
- (void)addSipUser
{
FGSipUserModel *model = [[FGSipUserModel alloc] init];
model.sipAccount = @"";
model.sipPassword = @"";
model.sipDomain = @"";
model.sipProxy = @"xxx.xxx.xxx:5060";
NSError *error;
self.account = [[VialerSIPLib sharedInstance] createAccountWithSipUser:model error:&error];
if (error) {
NSLog(@"Failed to create Account: %@", error);
} else {
NSLog(@"Succeed to create Account");
}
}
1.上面的
FGSipUserModel
类需实现SIPEnabledUser
协议.
2.这里的self.account
这样定义@property (nonatomic, strong) VSLAccount *account;
,最好是作为AppDelegate
的属性。
// FGSipUserModel.h
#import <Foundation/Foundation.h>
#import <VialerSIPLib/VialerSIPLib.h>
@interface FGSipUserModel : NSObject<SIPEnabledUser>
@property (nonatomic, readwrite) NSString *sipAccount;
@property (nonatomic, readwrite) NSString *sipPassword;
@property (nonatomic, readwrite) NSString *sipDomain;
@property (nonatomic, readwrite) NSString *sipProxy;
@end
// FGSipUserModel.m
#import "FGSipUserModel.h"
@implementation FGSipUserModel
@synthesize sipAccount = _sipAccount;
@synthesize sipPassword = _sipPassword;
@synthesize sipDomain = _sipDomain;
@synthesize sipProxy = _sipProxy;
@end
2.3、拨打电话
[[VialerSIPLib sharedInstance].callManager startCallToNumber:@"8007"
forAccount:self.account
completion:^(VSLCall * _Nullable call, NSError * _Nullable error) {
if (error) {
NSLog(@"Call error:%@", error);
}
}];
文章还未完成,敬请期待...