Period Tag for iOS app
You can add, remove, and get a list of installed tags on IncomingTags for enriched trips these are the same tags as on Incoming but already linked to a specific track. You can also delete, add, and get Tags already linked to a specific track.
Manage Tag methods
Add a new tag
-(void)addFutureTrackTag:(RPTag *)tag completion:(RPAPIITagCallback)callback;
remove tag
-(void)removeFutureTrackTag:(RPTag *)tag completion:(RPAPIITagCallback)callback;
get tag
-(void)getFutureTrackTag:(NSInteger)timestamp completion:(RPAPIITagGCallback)callback;
Remove all tags
-(void)removeAllFutureTrackTagsWithСompletion:(RPAPIITagWCallback)callback;
Usage examples:
- without completion:
[[RPEntry instance].api addFutureTrackTag:tag completion:nil];
- with completion:
[[RPEntry instance].api addFutureTrackTag:tag completion:^(RPTagStatus status, RPTag *tag, NSInteger timestamp) {}];
Code Example:
[[RPEntry instance].api addFutureTrackTag:tag completion:nil];
[[RPEntry instance].api addFutureTrackTag:tag completion:^(RPTagStatus status, RPTag *tag, NSInteger timestamp) {}];
[[RPEntry instance].api getFutureTrackTag:0 completion:^(RPTagStatus status, NSArray<RPTag *> *tags, NSInteger timestamp) {
for (RPTag *item in tags) {
NSLog(@"%@", item.tag);
}
}];
[[RPEntry instance].api removeFutureTrackTag:tag completion:^(RPTagStatus status, RPTag *tag, NSInteger timestamp) {}];
[[RPEntry instance].api removeAllFutureTrackTagsWithСompletion:^(RPTagStatus status, NSInteger timestamp) {}];
func addTag(_ status: RPTagStatus, tag: RPTag!, timestamp: Int) {
let json: [String : Any?] = [
"status": String(describing: status),
"tag": String(data: tag.toJSON() as! Data, encoding: .utf8),
"activationTime": timestamp
]
}
func deleteTag(_ status: RPTagStatus, tag: RPTag!, timestamp: Int) {
let json: [String : Any?] = [
"status": String(describing: status),
"tag": String(data: tag.toJSON() as! Data, encoding: .utf8),
"deactivationTime": timestamp
]
}
func removeAll(_ status: RPTagStatus, timestamp: Int) {
let json: [String : Any?] = [
"status": String(describing: status),
"time": timestamp
]
}
Status Delegate
Added new RPTagsServerStateDelegate
to monitor Tag operation status
Tag operation status
typedef NS_ENUM(NSUInteger, RPTagStatus) {
SUCCESS, // success for add or delete
OFFLINE, // app in offline and operation saved in local database
ERROR_WRONG_TIME, // operation canceled by server with wrong time(time from future)
ERROR_TAG_OPERATION // operation canceled by server as duplicated or incorrect
};
Code Example:
@interface MyListener () <RPTagsServerStateDelegate> {}
@end
@implementation MyListener
- (instancetype)init {
self = [super init];
if (self) {
[RPEntry instance].tagStateDelegate = self;
}
return self;
}
- (void)addTag:(RPTagStatus)status tag:(RPTag *)tag timestamp:(NSInteger)timestamp {
NSString *str = @"";
switch (status) {
case SUCCESS:
str = @"success for add or delete";
break;
case OFFLINE:
str = @"app in offline and operation saved in local database";
break;
case ERROR_WRONG_TIME:
str = @"operation canceled by server with wrong time(time from future)";
break;
case ERROR_TAG_OPERATION:
str = @"operation canceled by server as duplicated or incorrect";
break;
default:
break;
}
NSLog(@"%@ - %@ - %ld", str, tag.toJSON, timestamp);
}
- (void)deleteTag:(RPTagStatus)status tag:(RPTag *)tag timestamp:(NSInteger)timestamp {
NSString *str = @"";
switch (status) {
case SUCCESS:
str = @"success for add or delete";
break;
case OFFLINE:
str = @"app in offline and operation saved in local database";
break;
case ERROR_WRONG_TIME:
str = @"operation canceled by server with wrong time(time from future)";
break;
case ERROR_TAG_OPERATION:
str = @"operation canceled by server as duplicated or incorrect";
break;
default:
break;
}
NSLog(@"%@ - %@ - %ld", str, tag.toJSON, timestamp);
}
- (void)getTags:(RPTagStatus)status tags:(id)tags timestamp:(NSInteger)timestamp {
NSString *str = @"";
switch (status) {
case SUCCESS:
str = @"success for add or delete";
break;
case OFFLINE:
str = @"app in offline and operation saved in local database";
break;
case ERROR_WRONG_TIME:
str = @"operation canceled by server with wrong time(time from future)";
break;
case ERROR_TAG_OPERATION:
str = @"operation canceled by server as duplicated or incorrect";
break;
default:
break;
}
NSLog(@"%@ - %@ - %ld", str, tags, timestamp);
}
- (void)removeAll:(RPTagStatus)status timestamp:(NSInteger)timestamp {
NSString *str = @"";
switch (status) {
case SUCCESS:
str = @"success for add or delete";
break;
case OFFLINE:
str = @"app in offline and operation saved in local database";
break;
case ERROR_WRONG_TIME:
str = @"operation canceled by server with wrong time(time from future)";
break;
case ERROR_TAG_OPERATION:
str = @"operation canceled by server as duplicated or incorrect";
break;
default:
break;
}
NSLog(@"%@ - %ld", str, timestamp);
}
@end
func getTags(_ status: RPTagStatus, tags: Any!, timestamp: Int) {
let _tags = tags as? RPTags
var strTags = [String]()
_tags?.tags.forEach { element in
let str = String(data: element.toJSON() as! Data, encoding: .utf8)!
strTags.append(str)
}
let json: [String : Any?] = [
"status": String(describing: status),
"tags": strTags,
"time": timestamp
]
}
Updated almost 3 years ago