1. Encrypted Image
When the device triggers a detection alarm, it usually uploads a screenshot of a real-time video to Tuya Cloud. The alarm message or cloud storage event obtained through the IPC SDK will carry an encrypted video screenshot, Need to use TYEncryptImage
component to display encrypted images.
1.1. TYEncryptImage
Add interfaces for displaying encrypted images through the category of UIImageView
. For details of the interfaces definition, please refer to UIImageView+TYAESImage.h
.
Declaration
Display encrypted image
- (void)ty_setAESImageWithPath:(NSString *)imagePath
encryptKey:(NSString *)encryptKey;
Parameters
Parameter | Description |
---|---|
imagePath | Image url path |
encryptKey | Encryption key |
Declaration
Display encrypted image, and set a placeholder image.
- (void)ty_setAESImageWithPath:(NSString *)imagePath
encryptKey:(NSString *)encryptKey
placeholderImage:(UIImage *)placeholderImage;
Parameters
Parameter | Description |
---|---|
placeholderImage | Placeholder image, display before image download completed. |
Declaration
Display encrypted image, and set a callback function that called when image download completed.
- (void)ty_setAESImageWithPath:(NSString *)imagePath
encryptKey:(NSString *)encryptKey
completed:(nullable TYEncryptWebImageCompletionBlock)completedBlock;
Parameters
Parameter | Description |
---|---|
completedBlock | Callback function |
1.1.1. Encrypted image download
Use the TYEncryptImageDownloader
class to download and decrypt the image data and get a UIImage
object.
Declaration
Download encrypted image.
- (void)downloadEncryptImageWithPath:(NSString *)imagePath
encryptKey:(NSString *)encryptKey
completed:(nullable TYEncryptWebImageCompletionBlock)completedBlock;
Parameters
Parameter | Description |
---|---|
imagePath | The url string of the encrypted picture |
encryptKey | Image encryption key |
completedBlock | Download result callback |
TYEncryptWebImageCompletionBlock Parameters
Parameter | Description |
---|---|
image | Image object, nil if download fails |
url | Url string of image |
from | Image source, indicating whether the image data is taken from the cache or downloaded from the cloud |
stage | Whitch step did the download task end |
error | Error information, nil if download success |
1.2. Alarm Message
In the alarm message, the value of the picture attachment TuyaSmartCameraMessageModel.attachPic
consists of two parts, the picture url path and the encryption key, which are spliced in the format of "{path}@{key}". When displaying the picture, you need to split this string with "@". If the value of the picture attachment string does not have the suffix "@{key}", it means that the picture is not encrypted.
Example
#import <TuyaSmartCameraKit/TuyaSmartCameraKit.h>
#import <TYEncryptImage/TYEncryptImage.h>
#import <SDWebImage/UIImageView+WebCache.h>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
}
TuyaSmartCameraMessageModel *messageModel = [self.messageModelList objectAtIndex:indexPath.row];
NSArray *components = [messageModel.attachPic componentsSeparatedByString:@"@"];
if (components.count != 2) {
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:messageModel.attachPic] placeholderImage:[self placeHolder]];
}else {
[cell.imageView ty_setAESImageWithPath:components.firstObject encryptKey:components.lastObject placeholderImage:[self placeHolder]];
}
cell.imageView.frame = CGRectMake(0, 0, 88, 50);
cell.textLabel.text = messageModel.msgTitle;
cell.detailTextLabel.text = messageModel.msgContent;
return cell;
}
1.3. Cloud storage event
In the cloud storage event, the value of the event screenshot TuyaSmartCloudTimeEventModel.snapshotUrl
is just a complete picture url path, and the key uses the unified key for cloud storage video playback.
Example
#import <TuyaSmartCameraKit/TuyaSmartCameraKit.h>
#import <SDWebImage/UIImageView+WebCache.h>
#import <TYEncryptImage/TYEncryptImage.h>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSDateFormatter *formatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"HH:mm:ss";
});
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"event"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"event"];
}
TuyaSmartCloudTimeEventModel *eventModel = [self.eventModels objectAtIndex:indexPath.row];
[cell.imageView ty_setAESImageWithPath:eventModel.snapshotUrl encryptKey:self.cloudManager.encryptKey placeholderImage:[self placeholder]];
cell.textLabel.text = eventModel.describe;
cell.detailTextLabel.text = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:eventModel.startTime]];
return cell;
}