日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過自定義互動消息實現送禮、彈商品卡片的互動

在集成AUI Kits后,如果您需要實現彈幕、送禮、電商購物車等個性化功能,需要自定義互動消息。本文通過觀眾給主播送禮物舉例介紹自定義互動消息的全鏈路流程。

自定義消息體

自定義消息類型,取值必須大于10000,且與AUI已定義的消息類型不重復,可以定義為30001

自定義消息體,針對禮物場景,一般需要定義ID、名稱、描述、渲染圖片地址等字段,不需要攜帶發送者ID和昵稱,互動消息SDK會在所有消息接收的回調中默認添加這些字段,不需要在此重復添加。

示例代碼

Android示例代碼

@MessageType(30001)

public class GiftModel implements Serializable {

public String id; //禮物ID

public String name; //禮物名稱

public String description; //禮物描述

public String imageUrl; //禮物圖片地址

}

說明

當前AUI所有自定義消息類型和實體可以請參見com.aliyun.aliinteraction.roompaas.message.model包下的實體類

iOS示例代碼

typedef NS_ENUM(NSUInteger, AUIRoomMessageType) {
    ... // AUI已定義消息類型
    AUIRoomMessageTypeGift = 30001,
};

// 定義與實現禮物model
@interface AUIRoomGiftModel : NSObject<AUIRoomMessageDataModel>

@property (nonatomic, copy) NSString *giftId;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *desc;
@property (nonatomic, copy) NSString *imageUrl;

@end

@implementation AUIRoomGiftModel

- (instancetype)initWithData:(NSDictionary *)data {
    self = [super init];
    if (self) {
        _giftId = [data objectForKey:@"id"];
        _name = [data objectForKey:@"name"];
        _desc = [data objectForKey:@"description"];
        _imageUrl = [data objectForKey:@"imageUrl"];
    }
    return self;
}

- (NSDictionary *)toData {
    return @{
        @"id":_giftId ?: @"",
        @"name":_name ?: @"",
        @"description":_desc ?: @"",
        @"imageUrl":_imageUrl ?: @"",
    };
}

@end

發送消息

Android示例代碼

  1. 在AUIMessageService接口中定義送禮物消息的方法。

    /**
     * 送禮物
     *
     * @param model    禮物消息體
     * @param anchorId 主播ID
     * @param callback 回調函數
     */
    void sendGift(GiftModel model, String anchorId, Callback<String> callback);
  2. 在AUIMessageServiceImpl類中實現上述送禮物消息的方法。

    @Override
    public void sendGift(GiftModel model, String anchorId, Callback<String> callback) {
        doSendMessage(model, anchorId, callback);
    }
    說明

    實現送禮物消息只需調用當前類中現有的doSendMessage方法,對應參數含義如下:

    • 參數anchorId為directUserId,指定該值時為私聊消息,表示只有當前Group下的指定用戶才能收到消息;如果不指定該值,即傳null時,表示為全員消息,此時當前Group下的全體成員均能收到消息。

    • 參數callback為發送消息到服務端的本次RPC調用的回調函數,上層根據業務需要傳遞,不關注時可傳null。

iOS示例代碼

在AUIRoomLiveService類中新增送禮物消息的方法,并封裝實現方式。

@interface AUIRoomLiveService : NSObject

// 給主播送禮物
- (void)sendGift:(AUIRoomGiftModel *)gift completed:(void(^)(BOOL))completed;

... 

@end

@implementation AUIRoomLiveService

...

#pragma mark - Gift

- (void)sendGift:(AUIRoomGiftModel *)gift completed:(void(^)(BOOL))completed {
    if (!self.isJoined || self.isAnchor) {
        if (completed) {
            completed(NO);
        }
        return;
    }
    [self sendData:gift type:AUIRoomMessageTypeGift uids:@[self.liveInfoModel.anchor_id] skipMuteCheck:YES skipAudit:YES completed:completed];
}

@end
說明

sendData對應參數含義如下:

  • uids:這里指定為主播id,也可以為空(表示全員都會收到消息)

  • skipMuteCheck:為YES,表示不受禁言影響

  • skipAudit:為YES,表示消息內容不經審核

接收消息

Android示例代碼

  1. 在AUIMessageListener接口中定義接收禮物的回調函數。

    /**
     * 收到送禮物消息
     *
     * @param message 消息體
     */
    void onGiftReceived(Message<GiftModel> message);
  2. 在SimpleOnMessageListener類中添加上述接收禮物回調函數的空實現。

    @Override
    public void onGiftReceived(Message<GiftModel> message) {
    
    }

iOS示例代碼

在AUIRoomLiveService類中新增回調Block,并在收到IM消息時觸發回調。

// 定義回調Block
@property (nonatomic, copy) void (^onReceivedGift)(AUIRoomUser *sender, AUIRoomGiftModel *gift);


- (void)onCustomMessageReceived:(AUIRoomMessageModel *)message {
    
    AUIRoomUser *sender = message.sender;
    NSDictionary *data = message.data;

    if (message.msgType == AUIRoomMessageTypeGift) {
        if (self.onReceivedGift) {
            self.onReceivedGift(sender, [[AUIRoomGiftModel alloc] initWithData:data]);
        }
        return;
    }

    ...
}

上層調用

Android示例代碼

觀眾端,送禮物

GiftModel model = new GiftModel();
model.id = "<禮物ID>";
model.name = "<禮物名稱>";
model.description = "<禮物描述>";
model.imageUrl = "<禮物圖片地址>";
getMessageService().sendGift(model, getAnchorId(), null);
說明

getAnchorId是BaseComponent中的基類方法,所有子Component均可直接調用。

主播端,接收禮物

getMessageService().addMessageListener(new SimpleOnMessageListener() {
    @Override
    public void onGiftReceived(Message<GiftModel> message) {
        String senderId = message.senderId;
        String senderNick = message.senderInfo.userNick;
        GiftModel giftModel = message.data;
        showToast(String.format("%s給你送來了%s", senderNick, giftModel.name));
    }
});

iOS示例代碼

觀眾端,送禮物

// AUILiveRoomAudienceViewController.m

AUIRoomGiftModel *gift = [AUIRoomGiftModel new];
gift.giftId = @"id";
gift.name = @"火箭";
gift.desc = @"送你一個大火箭,加油!";
gift.imageUrl = @"http://www.xxx.com";
[self.liveService sendGift:gift completed:^(BOOL result) {
    
}];

主播端,接收禮物

// AUILiveRoomAnchorViewController.m

// 在AUILiveRoomAnchorViewController初始化時,添加接收禮物的監聽
_liveService.onReceivedGift = ^(AUIRoomUser * _Nonnull sender, AUIRoomGiftModel * _Nonnull gift) {
    // 處理接收到的禮物
};