QuickBlox iOS SDK for messaging and video calling
BSD-3-CLAUSE License
Bot releases are visible (Hide)
Added + [QBSettings chatEndpointPort];
- The port the xmpp server is running on (only enterprise). If you do not explicitly set the port, the default port will be used. If you set the port to zero, the default port will be used. The default port is 5223.
Resolved XMLDictionary library
conflicts. GitHub issue Video acceptCall error - Failed to create session description: Invalid SDP line.
Inline documentation grammar fixes
- [QBChat lastActivityForUserWithID:completion:]
and - [QBChat lastActivityForUserWithID:timeout:completion:]
- [QBChat setActivePrivacyListWithName:]
method. Use - [QBChat setDefaultPrivacyListWithName:
setChatDNSLookupCacheEnabled
, setStreamResumptionEnabled
Added Nullability
Added subscript support for custom parameters. How to use (Objective-C/Swift code syntactic improvement):
QBChatAttachment *attachment = [[QBChatAttachment alloc] init];
//Set custom parameters:
attachment[@"fileSize"] = @"1000";
attachment[@"width"] = @"640";
attachment[@"height"] = @"480";
// Get custom parameters:
NSInteger fileSize = attachment[@"fileSize"].integerValue;
NSInteger width = attachment[@"width"].integerValue;
NSInteger height = attachment[@"height"].integerValue;
Added subscript support for fields parameters. How to use:
QBCOCustomObject *object = [QBCOCustomObject customObject];
object.className = MovieClass;
object[@"name"] = @"Terminator4";
object[@"description"] = @"best movie ever!";
object[@"raiting"] = @"5";
+[QBChatErrorsFabric errorNotJoinedToRoom:]
@property (nonatomic, assign, readonly) BOOL carbon
;@property NSString *data;
. Use object subscripting instead;setChatDNSLookupCacheEnabled
, setStreamResumptionEnabled
QBCEntity
in to NSObject
[QBContactList lastActivityForContactListItem:withCompletion:]
method. Use - [QBChat lastActivityForUserID:completion:]
Refactoring internal rest functionality, style, and simplify interface
Encapsulated Public Interface in to Private.
Added RequestID, Request duration and Beautified Request / Response logging. Example:
2017-05-19 13:38:44.774942 Snippet-macOS[87423:3432445] [QBCore]: Request[1]:
POST URL:https://api.quickblox.com/users.json
headers: {
"Accept-Language" = "en-RU;q=1, ru-RU;q=0.9, uk-RU;q=0.8";
"Content-Type" = "application/x-www-form-urlencoded";
"QB-OS" = macOS;
"QB-SDK" = "macOS 2.9.3.rc";
"QB-Token" = xxxxxxxxxxxx;
"QuickBlox-REST-API-Version" = "0.1.1";
"User-Agent" = "Snippet-macOS/1.0 (Mac OS X Version 10.12.4 (Build 16E195))";
}
parameters: {
user = {
email = "xxxxxxxxx";
password = xxxxxxxxxx;
};
}
2017-05-19 13:38:45.915378+0300 Snippet-macOS[87423:3432409] [QBCore]: Response[1]:
headers: {
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 48;
"Content-Type" = "application/json; charset=utf-8";
Date = "Fri, 19 May 2017 10:38:46 GMT";
Duration = "1.139199";
"QB-Token-ExpirationDate" = "2017-05-19 12:38:46 UTC";
"QuickBlox-REST-API-Version" = "0.1.1";
Server = "openresty/1.9.15.1";
Status = "422 Unprocessable Entity";
"Strict-Transport-Security" = "max-age=31536000";
"X-Content-Type-Options" = nosniff;
"X-Frame-Options" = SAMEORIGIN;
"X-Request-Id" = "0035bcf1-b966-41c2-82d8-b9376c0def37";
"X-Runtime" = "0.072549";
"X-XSS-Protection" = "1; mode=block";
}
error: Request failed: client error (422)
reasons: {
errors = {
email = (
"has already been taken."
);
};
}
Deprecated in 2.9.3 Please note: the Location API along with associated documentation and code samples has been deprecated and is no longer maintained. We no longer provide support for this module, nor do we encourage its use in your project. We suggest that in order to achieve similar functionality, you use the Custom Objects API.")
@property (nonatomic, strong, readonly, class) QBSession *currentSession
;@property (assign, nonatomic, readonly) BOOL tokenHasExpired;
+ [QBRequest notificationsSettingsForDialogID:successBlock:errorBlock:]
+ [QBRequest updateNotificationsSettingsForDialogID:enable:successBlock:errorBlock:]
[QBRequest:updateMessage:successBlock:errorBlock:]
method. Use + [QBRequest markMessagesAsRead:dialogID:successBlock:errorBlock:]
.+ [QBRequest dialogsWithSuccessBlock:errorBlock:]
method. Use '+ [QBRequest dialogsForPage:dialogID:extendedRequest:successBlock:errorBlock:]
.+ [QBRequest messagesWithDialogID:successBlock:errorBlock:]
method. Use '+ [QBRequest messagesWithDialogID:extendedRequest:successBlock:errorBlock:]'.Multiple filters support. Example:
NSDictionary *filters = @{@"filter" : @[
[NSString stringWithFormat:@"number id in %@", @"28784298, 28784624"],
[NSString stringWithFormat:@"date updated_at gt %@", @"2017-06-15T23:19:26Z"] ]};
[QBRequest usersWithExtendedRequest:filters page:nil successBlock:nil errorBlock:nil];
+ [QBRequest objectsWithClassName:successBlock:errorBlock:]
method. Use + [QBRequest objectsWithClassName:extendedRequest:successBlock:errorBlock:]
.+ [QBRequest unregisterSubscriptionForUniqueDeviceIdentifier:successBlock:errorBlock:]
blobsForPage:successBlock:errorBlock:
'. [QBRequest taggedBlobsWithSuccessBlock:errorBlock:]
method. Use 'taggedBlobsForPage:successBlock:errorBlock
:'.+ [QBRequest taggedBlobsForPage:successBlock:errorBlock:]
method.+ [QBRequest createBlob:successBlock:errorBlock:]
method.+ [QBRequest completeBlobWithID:successBlock:errorBlock:]
method.Added new http client for custom https requests. Public interface:
[QBRequest GET:parameters:progress:success:failure:]
- Creates and runs an QBRequest
with a GET
request.[QBRequest HEAD:parameters:success:failure:]
- Creates and runs an QBRequest
with a HEAD
request.[QBRequest POST:parameters:progress:success:failure:]
- Creates and runs an QBRequest
with a POST
request.[QBRequest PUT:parameters:success:failure:]
- Creates and runs an QBRequest
with a PUT
request.[QBRequest PATCH:parameters:success:failure:]
- Creates and runs an QBRequest
with a PATCH
request.[QBRequest DELETE:parameters:success:failure:]
- Creates and runs an QBRequest
with a DELETE
request.Published by Raikerian over 7 years ago
Conference module (Enterprise-only feature):
Published by Raikerian over 7 years ago
Fixed potential memory leak with for video calls when the recorder (introduced in 2.6) was not in use.
Published by over 7 years ago
QBRTCRecorder
class. This class represents WebRTC audio and video calls recorder. Check out this link for more information on how to use it.QBRTCAudioSession
class.audioSessionDidStartPlayOrRecord:
delegate. Called when the audio device is notified to begin playback or recording.audioSessionDidStopPlayOrRecord:
delegate. Called when the audio device is notified to stop playback or recording.audioSessionDidBeginInterruption
: delegate. Called when AVAudioSession
starts an interruption event.audioSessionDidEndInterruption:shouldResumeSession:
delegate. Called when AVAudioSession
ends an interruption event.QBRTCAudioTrackSinkInterface
protocol to QBRTCAudioTrack
class. Use this protocol to sink audio data for a specific remote audio track in real time. Check out this link for more information on how to use it.adaptOutputFormatToWidth:height:fps:
method to QBRTCVideoCapture
class. This method allows you to adapt frames in your capture to any possible dimension you want. Note that this method adapts existing captured frame, not the camera format.userID NSNumber
property to QBRTCMediaStreamTrack
class. This means that both QBRTCAudioTrack
and QBRTCVideoTrack
classes will now have a specific user ID bound to them. Property will be nil if track is local.QBRTCFrameConverter
class.Published by over 7 years ago
volume
property to QBRTCAudioTrack
class. Use it to change volume for a specific remote audio track, which you can get in client for a specific user in call.audioLevelControlEnabled
property in QBRTCMediaStreamConfiguration
class. Determines whether webrtc audio level control is enabled. Rough example: slightly reducing audio volume for all tracks while you are talking (local audio track receiving sound). Default value is NO.QBRTCCameraCapture
class.startSession
deprecated method, use startSession:
instead.stopSession
deprecated method, use stopSession:
instead.stopSessionAndTeardownOutputs:
deprecated method, use stopSession:
instead.selectCameraPosition:
deprecated method, use setPosition:
instead.currentPosition
deprecated method, use position instead.deinitializeRTC
method in QBRTCClient class
. From now on QBRTCCLient
managing deinitialization of webrtc on itself after initial initialization by initializeRTC
method. Just remove usage of this method.QBRTCSoundRouter
class. Use QBRTCAudioSession
instead.QBRTCConnectionState
enum.QBRTCPixelFormat420v
and QBRTCPixelFormatBGRA
deprecated enums in QBRTCPixelFormat
enum. Those formats weren't implemented by SDK and were completely unsupported.initWithPixelBuffer:
deprecated method in QBRTCVideoFrame
class. Use initWithPixelBuffer:videoRotation:
instead.v2.9.2 — Feb 14, 2017
sendVoipPush:toUsers: successBlock:errorBlock:
and sendVoipPush:toUsersWithAnyOfTheseTags:successBlock:errorBlock:
to QBRequest
class. Use them in order to send VOIP push notifications.QBMPushTypeAPNSVOIP
push type to QBMPushType
enum.kQBMNotificationChannelsAPNSVOIP
NSString constant as one of the notification channels.kQBMPushTypeAPNSVOIP
NSString type as one of the push types.unregisterSubscriptionForUniqueDeviceIdentifier:successBlock:errorBlock
method in QBRequest
class.Framework:
Built as dynamic framework.
QuickbloxWebRTC
installed manually, don't forget to add it as Embedded binary.Developer comment: From now on framework is built and distributed as
dynamic framework
. You can read more about it here. This will also allow the use of use_frameworks! flag in pod file, that is usingQuickbloxWebRTC
framework as one of itspods
.
Added full bitcode support.
Developer comment:
QuickbloxWebRTC
framework is now fully supportsbitcode
. You can enablebitcode
in your project (if no other framework you are using don't have it) and we are highly encouraging you to do it. You can read more about bitcode here.
Reduced size of our framework from 84.3 mb to 67.4 mb.
Developer comment:
Bitcode
support anddynamic framework
itself have allowed us to reduce our framework size in ~21%.
Core:
-session:hungUpByUser:userInfo:
delegate method of QBRTCClientDelegate
protocol not being called (thanks to neshyurik for reporting the issue).Sample video chat:
QBRTCScreenCapture
class. Now using kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
pixel format (better performance).Published by over 7 years ago
Published by almost 8 years ago
Implemented markMessagesAsDelivered:dialogID:successBlock:errorBlock: QBRequest. Use it to mark messages as delivered.
Deprecated read property in QBChatMessage class. Use readIDs to determine whether the message was read.
Published by about 8 years ago
iOS 10 - In order for QBSession restoration from keychain to work as intended, you from now on need to turn on keychain share in your application project capabilities.