BMXPushManager Protocol Reference

Conforms to NSObject
Declared in BMXPushManager.h

Overview

推送管理器

Instance Methods

addDelegate:

- (void)addDelegate:(id<BMXPushServiceProtocol>)*aDelegate*

Example:

- (void)registerAPNs {
    [[[BMXClient sharedClient] pushService] start];
    [[[BMXClient sharedClient] pushService] addDelegate:self];
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self configCollectionView];
    self.view.clipsToBounds = YES;
    [[[BMXClient sharedClient] chatService] addDelegate:self];
- (void)addIMListener {
    BMXClient *client = [BMXClient sharedClient];
    [[client rosterService] addDelegate:self];
- (void)addIMListener {
    BMXClient *client = [BMXClient sharedClient];
    [[client rosterService] addDelegate:self];
    [[client chatService] addDelegate:self];
- (void)addIMListener {
    BMXClient *client = [BMXClient sharedClient];
    [[client rosterService] addDelegate:self];
    [[client chatService] addDelegate:self];
    [[client userService] addDelegate:self];
- (void)addIMListener {
    BMXClient *client = [BMXClient sharedClient];
    [[client rosterService] addDelegate:self];
    [[client chatService] addDelegate:self];
    [[client userService] addDelegate:self];
    [[client groupService] addDelegate:self];

addDelegate:delegateQueue:

- (void)addDelegate:(id<BMXPushServiceProtocol>)*aDelegate* delegateQueue:(dispatch_queue_t)*aQueue*

Example:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    self.account = [IMAcountInfoStorage loadObject];
    [self  getMyProfile];
    
    [self setUpNavItem];
    [self setupSubview];
    
    [self loadMessages];
    
    [self scrollToBottomAnimated:NO refresh:NO];
    
    [[[BMXClient sharedClient] chatService] addDelegate:self delegateQueue:dispatch_get_main_queue()];

addPushListener:

添加聊天监听者

- (void)addPushListener:(id<BMXPushServiceProtocol>)*listener*

Parameters

listener
监听者

Discussion

添加聊天监听者

Declared In

  • BMXPushManager.h

Example:

bindDeviceToken:completion:

推送绑定设备token。

- (void)bindDeviceToken:(NSString *)*deviceToken* completion:(void ( ^ ) ( BMXError *error ))*aCompletionBlock*

Parameters

deviceToken
token 设备的推送token

aCompletionBlock
绑定回调

Discussion

推送绑定设备token。

Declared In

  • BMXPushManager.h

Example:

clearAllNotifications

用于移除在通知中心显示的所有推送

- (void)clearAllNotifications

Discussion

用于移除在通知中心显示的所有推送

Declared In

  • BMXPushManager.h

Example:

clearNotification:

用于移除在通知中心显示的指定推送 iOS 10 以上 支持通过identifier 移除指定推送 iOS 10 以下 identifier 设置为 0 ,则移除所有推送

- (void)clearNotification:(NSInteger)*notificationId*

Parameters

notificationId
如果notificationId 置 0 ,则移除所有推送

Discussion

用于移除在通知中心显示的指定推送 iOS 10 以上 支持通过identifier 移除指定推送 iOS 10 以下 identifier 设置为 0 ,则移除所有推送

Declared In

  • BMXPushManager.h

Example:

clearTagsByOperationId:

清空推送用户的标签。

- (void)clearTagsByOperationId:(NSString *)*operationId*

Parameters

operationId
操作id。在回调通知中对应通知提醒。

Discussion

清空推送用户的标签。

Declared In

  • BMXPushManager.h

Example:

deleteTags:operationId:

删除推送用户的标签。

- (void)deleteTags:(NSArray<NSString*> *)*tags* operationId:(NSString *)*operationId*

Parameters

tags
要删除用户标签

operationId
操作id。在回调通知中对应通知提醒。

Discussion

删除推送用户的标签。

Declared In

  • BMXPushManager.h

Example:

getCertification

获取登陆后服务器返回的推送证书。

- (void)getCertification

Discussion

获取登陆后服务器返回的推送证书。

Declared In

  • BMXPushManager.h

Example:

getPushProfileForceRefresh:completion:

获取推送用户详情,如果forceRefresh == true,则强制从服务端拉取

- (void)getPushProfileForceRefresh:(BOOL)*forceRefresh* completion:(void ( ^ ) ( BMXPushUserProfile *profile , BMXError *aError ))*aCompletionBlock*

Parameters

forceRefresh
是否强制从服务器拉取,本地获取失败的情况下会自动从服务器拉取

profile
推送用户profile信息,初始传入指向为空的shared_ptr对象,函数返回后从此处获取用户profile信息。

Discussion

获取推送用户详情,如果forceRefresh == true,则强制从服务端拉取

Declared In

  • BMXPushManager.h

Example:

getTagsByOperationId:withCompletion:

获取推送用户的标签。

- (void)getTagsByOperationId:(NSString *)*operationId* withCompletion:(void ( ^ ) ( NSArray *tags , BMXError *error ))*aCompletionBlock*

Parameters

operationId
操作id。在回调通知中对应通知提醒。

aCompletionBlock
获取回调

Discussion

获取推送用户的标签。

Declared In

  • BMXPushManager.h

Example:

getToken

获取登陆后使用的用户token。

- (void)getToken

Discussion

获取登陆后使用的用户token。

Declared In

  • BMXPushManager.h

Example:

loadLocalPushMessagesFromMessageId:size:directionType:completion:

加载数据库本地存储的推送消息。如果不指定则从最新消息开始

- (void)loadLocalPushMessagesFromMessageId:(long long)*reMsgId* size:(NSUInteger)*size* directionType:(BMXPushMessageDirection)*directionType* completion:(void ( ^ ) ( NSArray *messageList , BMXError *error ))*aCompletionBlock*

Parameters

reMsgId
加载推送消息的起始id

size
最大加载消息条数

directionType
数据库返回的加载本地推送消息列表

aCompletionBlock
加载推送消息的方向,默认是加载更早的消息

Discussion

加载数据库本地存储的推送消息。如果不指定则从最新消息开始

Declared In

  • BMXPushManager.h

Example:

removeDelegate:

- (void)removeDelegate:(id<BMXPushServiceProtocol>)*aDelegate*

Example:

removePushListener:

移除聊天监听者

- (void)removePushListener:(id<BMXPushServiceProtocol>)*listener*

Parameters

listener
监听者

Discussion

移除聊天监听者

Declared In

  • BMXPushManager.h

Example:

resume

恢复推送功能接口。

- (void)resume

Discussion

恢复推送功能接口。

Declared In

  • BMXPushManager.h

Example:

- (BOOL)canRecord
{
    __block BOOL bCanRecord = YES;
    
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
        [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
            bCanRecord = granted;
        }];
    }
    
    return bCanRecord;
- (void)addContentView {
    
    [self.view addSubview:self.contentView];
    __weak ChangePasswordViewController *weakSelf = self;
    self.contentView.changeBlock = ^(NSString * _Nonnull newPassword) {
        [weakSelf changePasswordApi:newPassword];
    };
            messageModel.nickName = [roster.nickName length] ? roster.nickName : roster.userName;
            [weakCell setMessageName:messageModel.nickName];
        }
    }];
} else {
    messageModel.isChatGroup = NO;
}
messageCell.messageModel = messageModel;
MAXLog(@"%@",     messageCell.messageModel.content);
return messageCell;
[[[BMXClient sharedClient] rosterService] searchByRosterId:messageModel.messageObjc.fromId forceRefresh:NO completion:^(BMXRoster *roster, BMXError *error) {
    if (!error) {
                
        if ([[NSFileManager defaultManager] fileExistsAtPath:roster.avatarThumbnailPath]) {
            UIImage *avarat = [UIImage imageWithContentsOfFile:roster.avatarThumbnailPath];
            [weakCell setAvaratImage:avarat];
        }else {
                    
            [[[BMXClient sharedClient] rosterService] downloadAvatarWithRoster:roster isThumbnail:YES progress:^(int progress, BMXError *error) {
                        
            } completion:^(BMXRoster *roster, BMXError *error) {
                if (!error) {
                    UIImage *avarat = [UIImage imageWithContentsOfFile:roster.avatarThumbnailPath];
                    [weakCell setAvaratImage:avarat];
                }else {
                    [weakCell setAvaratImage:nil];
                }
            }];
-(void) setMainText:(NSString*) mainText detailText:(NSString*) detailText switcherFlag:(BOOL) switcherFlag switcherTarget:(__weak id) target switcherSelector:(nullable SEL) selector
{
    [_line setHidden:NO];
    _mainText.text = mainText;
    if(detailText == nil) {
        [_settingSwitch setHidden:NO];
        [_detailText setHidden:YES];
        _settingSwitch.on = switcherFlag;
        if(selector != nil) {
            [_settingSwitch addTarget:target action:selector forControlEvents:UIControlEventValueChanged];
        }
    }else {
        _detailText.text = detailText;
        [_settingSwitch setHidden:YES];
        [_detailText setHidden:NO];
    }
- (KeyboardEmojiModel *)findEmoji:(NSString *)string {
    __block KeyboardEmojiModel *emotion;
    for (KeyboardEmojiPackage *package in [KeyboardEmojiPackage loadPackages]) {
        [package.emojis enumerateObjectsUsingBlock:^(KeyboardEmojiModel *item, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([item.name isEqualToString:string]) {
                emotion = item;
            }
        }];
        
        if (emotion) {
            break;
        }
    }
    return emotion;
- (KeyboardToolBar *)toolBarView {
    if (!_toolBarView) {
        _toolBarView = [KeyboardToolBar new];
        __weak KeyboardVC *weakKeyBoard = self;
        _toolBarView.emojiSend = ^() {
            !weakKeyBoard.emojiSend ? : weakKeyBoard.emojiSend();
        };
        _toolBarView.backgroundColor = [UIColor lh_colorWithHex:0xffffff];
- (KeyboardEmojiTextView *)textView {
    if (!_textView) {
        LHWeakSelf
        _textView = [KeyboardEmojiTextView new];
        _textView.delegate = self;
        _textView.backgroundColor = [UIColor whiteColor];
        _textView.font = [UIFont systemFontOfSize:kChatInputTextViewFont];
        _textView.returnKeyType = UIReturnKeySend;
        _textView.enablesReturnKeyAutomatically = YES;
        _textView.layer.borderColor = [UIColor lh_colorWithHex:0xe1e1e5].CGColor;
        _textView.layer.borderWidth = 0.5;
        _textView.showsVerticalScrollIndicator = YES;
        _textView.showsHorizontalScrollIndicator = NO;
        _textView.layer.cornerRadius = 5;
        _textView.insertEmojiTextBlock = ^(UITextView *textView) {
            [weakSelf textViewDidChange:textView];
        };
        _textView.layoutManager.allowsNonContiguousLayout = NO;

sendMessage:

发送推送上行消息,消息状态变化会通过listener通知

- (void)sendMessage:(NSString *)*message*

Parameters

message
发送的上行推送消息内容

Discussion

发送推送上行消息,消息状态变化会通过listener通知

Declared In

  • BMXPushManager.h

Example:

alertView.btnClickBlock = ^{
        
    UIImage *image = contentImg;
    NSData *imageData = UIImageJPEGRepresentation(image,1.0f);
    NSData *thumImageData =  UIImageJPEGRepresentation(image,1.0f);
    BMXImageAttachment *imageAttachment = [[BMXImageAttachment alloc] initWithData:imageData thumbnailData:thumImageData imageSize:image.size conversationId:[NSString stringWithFormat:@"%lld",group.groupId]];
    imageAttachment.pictureSize = CGSizeMake(image.size.width, image.size.height);
    IMAcount *account = [IMAcountInfoStorage loadObject];
    BMXMessageObject *messageObject = [[BMXMessageObject alloc] initWithBMXMessageAttachment:imageAttachment fromId:[account.usedId longLongValue] toId:group.groupId type:BMXMessageTypeGroup conversationId:group.groupId];
    messageObject.contentType = BMXContentTypeImage;
    if (messageObject) {
        [[[BMXClient sharedClient] chatService] sendMessage:messageObject];
- (void)sendTypingMessage:(NSDictionary *)configdic {
    BMXMessageObject *messageObject = [[BMXMessageObject alloc] initWithBMXMessageText:@""
                                                                                fromId:[self.account.usedId longLongValue]
                                                                                  toId:self.currentRoster.rosterId
                                                                                  type:BMXMessageTypeSingle
                                                                        conversationId:self.currentRoster.rosterId];
    messageObject.extensionJson = [NSString jsonStringWithDictionary:configdic];
    messageObject.qos = DeliveryQosModeAtMostOnce;
    [[[BMXClient sharedClient] chatService] sendMessage:messageObject];
    self.lastTime = [NSString stringWithFormat:@"%f",messageModel.messageObjc.serverTimestamp * 0.001];
    [self insertNewMessageOrTime:time];
    //        self.lastTime = time;
}
NSIndexPath *index = [self insertNewMessageOrTime:messageModel];
[self.messages addObject:messageModel];
[self.tableView scrollToRowAtIndexPath:index atScrollPosition:UITableViewScrollPositionBottom animated:YES];
    
if (messageObject) {
    messageObject.clientTimestamp = [messageModel.date longLongValue];
    [[[BMXClient sharedClient] chatService] sendMessage:messageObject];
_chatBarView.sendContent = ^(LHContentModel *content) {
    [weakSelf sendMessage:content];
alertView.btnClickBlock = ^{
        
        UIImage *image = contentImg;
        NSData *imageData = UIImageJPEGRepresentation(image,1.0f);
        NSData *thumImageData =  UIImageJPEGRepresentation(image,1.0f);
        BMXImageAttachment *imageAttachment = [[BMXImageAttachment alloc] initWithData:imageData thumbnailData:thumImageData imageSize:image.size conversationId:[NSString stringWithFormat:@"%lld",roster.rosterId]];
        imageAttachment.pictureSize = CGSizeMake(image.size.width, image.size.height);
        IMAcount *account = [IMAcountInfoStorage loadObject];
    BMXMessageObject *messageObject = [[BMXMessageObject alloc] initWithBMXMessageAttachment:imageAttachment fromId:[account.usedId longLongValue] toId:roster.rosterId type:BMXMessageTypeSingle conversationId:roster.rosterId];
        messageObject.contentType = BMXContentTypeImage;
    if (messageObject) {
        [[[BMXClient sharedClient] chatService] sendMessage:messageObject];
- (void)sendMessage:(LHContentModel *)content {
    if (content.words && content.words.length) {
        // 文字类型
        [self p_configsendMessage:content.words type:MessageBodyType_Text duartion:0];
    }
    if (!content.photos && !content.photos.photos.count) return;
    // 图片类型
    [content.photos.photos enumerateObjectsUsingBlock:^(UIImage *image, NSUInteger idx, BOOL * stop) {
        [self p_configsendMessage:image type:MessageBodyType_Image duartion:0];
    }];
}

setBadge:

设置推送用户的未读角标。

- (void)setBadge:(int)*count*

Parameters

count
用户未读角标数

Discussion

设置推送用户的未读角标。

Declared In

  • BMXPushManager.h

Example:

setPushMode:

设置推送启用状态。默认为使用推送。

- (void)setPushMode:(BOOL)*enable*

Parameters

enable
推送的启用状态

Discussion

设置推送启用状态。默认为使用推送。

Declared In

  • BMXPushManager.h

Example:

setPushTimeStartHour:endHour:

设置允许推送时间。

- (void)setPushTimeStartHour:(int)*startHour* endHour:(int)*endHour*

Parameters

startHour
静默允许推送的起始时间小时

endHour
静默允许推送的结束时间小时

Discussion

设置允许推送时间。

Declared In

  • BMXPushManager.h

Example:

setSlienceTimeStartHour:endHour:

设置推送静默的起始结束时间。

- (void)setSlienceTimeStartHour:(int)*startHour* endHour:(int)*endHour*

Parameters

startHour
静默推送的起始时间小时

endHour
静默推送的结束时间小时

Discussion

设置推送静默的起始结束时间。

Declared In

  • BMXPushManager.h

Example:

setTags:operationId:

设置推送用户的标签。

- (void)setTags:(NSArray<NSString*> *)*tags* operationId:(NSString *)*operationId*

Parameters

tags
用户标签

operationId
操作id。在回调通知中对应通知提醒。

Discussion

设置推送用户的标签。

Declared In

  • BMXPushManager.h

Example:

start

初始化推送sdk。在仅使用推送的情况下使用该接口初始化推送sdk。在同时使用IM功能的时候直接在BMXClient调用登陆功能即可。config对象初始化的时候需要传入平台类型和设备id。

- (void)start

Discussion

初始化推送sdk。在仅使用推送的情况下使用该接口初始化推送sdk。在同时使用IM功能的时候直接在BMXClient调用登陆功能即可。config对象初始化的时候需要传入平台类型和设备id。

Declared In

  • BMXPushManager.h

Example:

- (void)registerAPNs {
    [[[BMXClient sharedClient] pushService] start];
- (YYTextHighlight *)_getHighlightAtPoint:(CGPoint)point range:(NSRangePointer)range {
    if (!self._innerLayout.containsHighlight) return nil;
    point = [self _convertPointToLayout:point];
    YYTextRange *textRange = [self._innerLayout textRangeAtPoint:point];
    if (!textRange) return nil;
    
    NSUInteger startIndex = textRange.start.offset;
- (BOOL)isEqual:(YYTextRange *)object {
    if (!object) return NO;
    return [_start isEqual:object.start] && [_end isEqual:object.end];
- (YYTextRange *)_correctedRangeWithEdge:(YYTextRange *)range {
    NSRange visibleRange = self.visibleRange;
    YYTextPosition *start = range.start;
- (YYTextRange *)_correctedRangeWithEdge:(YYTextRange *)range {
    NSRange visibleRange = self.visibleRange;
    YYTextPosition *start = range.start;
    YYTextPosition *end = range.end;
    
    if (start.offset == visibleRange.location && start.affinity == YYTextAffinityBackward) {
        start = [YYTextPosition positionWithOffset:start.offset affinity:YYTextAffinityForward];
    }
    
    if (end.offset == visibleRange.location + visibleRange.length && start.affinity == YYTextAffinityForward) {
        end = [YYTextPosition positionWithOffset:end.offset affinity:YYTextAffinityBackward];
    }
    
    if (start != range.start || end != range.end) {
}
newPos = [self closestPositionToPoint:point];
if ([newPos compare:otherPosition] == [oldPosition compare:otherPosition] &&
    newPos.offset != otherPosition.offset) {
    return newPos;
}
    
if (_container.isVerticalForm) {
    if ([oldPosition compare:otherPosition] == NSOrderedAscending) { // search backward
        YYTextRange *range = [self textRangeByExtendingPosition:otherPosition inDirection:UITextLayoutDirectionUp offset:1];
        if (range) return range.start;
    if ([oldPosition compare:otherPosition] == NSOrderedAscending) { // search backward
        YYTextRange *range = [self textRangeByExtendingPosition:otherPosition inDirection:UITextLayoutDirectionUp offset:1];
        if (range) return range.start;
    } else { // search forward
        YYTextRange *range = [self textRangeByExtendingPosition:otherPosition inDirection:UITextLayoutDirectionDown offset:1];
        if (range) return range.end;
    }
} else {
    if ([oldPosition compare:otherPosition] == NSOrderedAscending) { // search backward
        YYTextRange *range = [self textRangeByExtendingPosition:otherPosition inDirection:UITextLayoutDirectionLeft offset:1];
        if (range) return range.start;
// head or tail, returns immediately
if (!forwardMove && position.offset == visibleStart) {
    return [YYTextRange rangeWithRange:NSMakeRange(_visibleRange.location, 0)];
} else if (forwardMove && position.offset == visibleEnd) {
    return [YYTextRange rangeWithRange:NSMakeRange(position.offset, 0) affinity:YYTextAffinityBackward];
}
    
// extend from position
YYTextRange *fromRange = [self textRangeByExtendingPosition:position];
if (!fromRange) return nil;
YYTextRange *allForward = [YYTextRange rangeWithStart:fromRange.start end:[YYTextPosition positionWithOffset:visibleEnd]];

startWithAlias:

初始化推送sdk。在仅使用推送的情况下使用该接口初始化推送sdk。在同时使用IM功能的时候直接在BMXClient调用登陆功能即可。config对象初始化的时候需要传入平台类型和设备id。

- (void)startWithAlias:(NSString *)*alias*

Parameters

alias
推送初始化使用的当前用户别名

Discussion

初始化推送sdk。在仅使用推送的情况下使用该接口初始化推送sdk。在同时使用IM功能的时候直接在BMXClient调用登陆功能即可。config对象初始化的时候需要传入平台类型和设备id。

Declared In

  • BMXPushManager.h

Example:

startWithAlias:bmxToken:

初始化推送sdk。在仅使用推送的情况下使用该接口初始化推送sdk。在同时使用IM功能的时候直接在BMXClient调用登陆功能即可。config对象初始化的时候需要传入平台类型和设备id。

- (void)startWithAlias:(NSString *)*alias* bmxToken:(NSString *)*bmxToken*

Parameters

alias
推送初始化使用的当前用户别名

bmxToken
推送初始化的时候App传入的使用的用户的token。

Discussion

初始化推送sdk。在仅使用推送的情况下使用该接口初始化推送sdk。在同时使用IM功能的时候直接在BMXClient调用登陆功能即可。config对象初始化的时候需要传入平台类型和设备id。

Declared In

  • BMXPushManager.h

Example:

status

推送sdk当前的状态。

- (BMXPushSdkStatus)status

Discussion

推送sdk当前的状态。

Declared In

  • BMXPushManager.h

Example:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"status"]) {
        AVPlayerItem * item = (AVPlayerItem *)object;
        if (item.status == AVPlayerItemStatusReadyToPlay) {
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"status"]) {
        AVPlayerItem * item = (AVPlayerItem *)object;
        if (item.status == AVPlayerItemStatusReadyToPlay) {
            [self.player play];
        }else if (item.status == AVPlayerItemStatusFailed){
- (void)layoutSubviews {
    [super layoutSubviews];
    
    CGRect bubbleFrame = _bubbleView.frame;
    bubbleFrame.origin.y = self.headImageView.frame.origin.y ;
    
    if (self.messageModel.isChatGroup) {
        bubbleFrame.origin.y = self.headImageView.frame.origin.y + 10;
    }
    if (self.messageModel.isSender) {
        bubbleFrame.origin.y = self.headImageView.frame.origin.y;
        // 菊花状态 (因不确定菊花具体位置,要在子类中实现位置的修改)
        switch (self.messageModel.status) {
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    if ([exportSession status] == AVAssetExportSessionStatusCompleted) {
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    switch ([exportSession status]) {
    
AVAssetTrack* videoTrack = [videoTracks objectAtIndex:0];
    
UIImageOrientation orientation = [self orientationFromAVAssetTrack:videoTrack];
    
int m_pixelFormatType = kCVPixelFormatType_32BGRA;
NSDictionary* options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt: (int)m_pixelFormatType] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
AVAssetReaderTrackOutput* videoReaderOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:videoTrack outputSettings:options];
[reader addOutput:videoReaderOutput];
[reader startReading];
while ([reader status] == AVAssetReaderStatusReading && videoTrack.nominalFrameRate > 0&&(!self.isCancelled)&&self.videoBlock) {

stop

停止推送功能接口

- (void)stop

Discussion

停止推送功能接口

Declared In

  • BMXPushManager.h

Example:

- (void)startRecordingWithFileName:(NSString *)fileName completion:(void(^)(NSError *error))completion {
    NSError *error = nil;
    if (![[BMXRecoderTools shareManager] canRecord]) {
        
        if (completion) {
            error = [NSError errorWithDomain:NSLocalizedString(@"error", NSLocalizedString(@"No_permission", @"没权限")) code:201 userInfo:nil];
            completion(error);
        }
        return;
    }
    if ([self.recorder isRecording]) {
        [_recorder stop];
- (void)stopRecordingWithCompletion:(void(^)(NSString *recordPath, int duration))completion
{
    
    _endDate = [NSDate date];
    if ([_recorder isRecording]) {
        if ([_endDate timeIntervalSinceDate:_startDate] < [self recordMinDuration]) {
            if (completion) {
                completion(shortRecord, [self.endDate timeIntervalSinceDate:self.startDate]);
            }
            [self.recorder stop];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self.recorder stop];
- (void)cancelCurrentRecording
{
    _recorder.delegate = nil;
    if (_recorder.recording) {
        [_recorder stop];
- (void)startPlayRecorder:(NSString *)recorderPath
{
    [self.player stop];
- (void)stopPlayRecorder:(NSString *)recorderPath
{
    [self.player stop];
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player
                       successfully:(BOOL)flag
{
    [self.player stop];
- (void)enterMainAction:(UIButton *)btn {
    [self stop];

unbindAlias:

解除用户别名绑定。

- (void)unbindAlias:(NSString *)*alias*

Parameters

alias
需要解除绑定的用户别名。

Discussion

解除用户别名绑定。

Declared In

  • BMXPushManager.h

Example:

© 2019-2022 美信拓扑 | 官网 该文件修订时间: 2022-09-21 11:43:07

results matching ""

    No results matching ""