El desarrollo de software de transmisión en vivo es uno de los tipos más populares de desarrollo de software social de video. Las plataformas de transmisión en vivo también son una de las plataformas en línea más populares para los jóvenes. Para aumentar la adherencia del usuario, muchas plataformas de transmisión en vivo han introducido funciones de recompensa de tareas. ¿Cómo se logra esto? ?
A continuación, tome el código fuente del sistema de transmisión en vivo de leopardo nublado como ejemplo para mostrarle cómo desarrollar un mecanismo completo de recompensa de tareas en el software de transmisión en vivo.
Como se muestra en la figura anterior, el código fuente del sistema de transmisión en vivo de leopardo nublado ha agregado dos entradas de "tareas diarias" en la sala en vivo y la página de inicio personal, respectivamente. Después de hacer clic para ingresar, puede ver el estado de finalización y las condiciones de finalización de las tareas diarias, y el usuario puede ser dirigido Realice las actividades correspondientes y reciba las recompensas correspondientes por las tareas completadas. Todas las tareas se actualizan cada 24 horas.
El código fuente del sistema de transmisión en vivo para realizar recompensas de tareas es el siguiente:
public class DailyTaskActivity extends AbsActivity {
@Override
protected int getLayoutId() {
return R.layout.activity_daily_task;
}
@Override
protected void main() {
setTitle(WordUtil.getString(R.string.daily_task));
LiveHttpUtil.getDailyTask("", 0, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
JSONObject obj = JSON.parseObject(info[0]);
TextView tip = findViewById(R.id.tip);
tip.setText(obj.getString("tip_m"));
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false));
List<DailyTaskBean> list = JSON.parseArray(obj.getString("list"), DailyTaskBean.class);
recyclerView.setAdapter(new DailyTaskAdapter(mContext, list));
}
}
});
}
@Override
protected void onDestroy() {
LiveHttpUtil.cancel(LiveHttpConsts.GET_DAILY_TASK);
LiveHttpUtil.cancel(LiveHttpConsts.DAILY_TASK_REWARD);
super.onDestroy();
}
}
public class DailyTaskDialogFragment extends AbsDialogFragment {
private String mLiveUid;
@Override
protected int getLayoutId() {
return R.layout.dialog_daily_task;
}
@Override
protected int getDialogStyle() {
return R.style.dialog;
}
@Override
protected boolean canCancel() {
return true;
}
@Override
protected void setWindowAttributes(Window window) {
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.horizontalMargin = 0.1f;
params.verticalMargin = 0.1f;
window.setAttributes(params);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
LiveHttpUtil.getDailyTask(mLiveUid, 1, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
JSONObject obj = JSON.parseObject(info[0]);
TextView tip = findViewById(R.id.tip);
tip.setText(obj.getString("tip_m"));
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false));
List<DailyTaskBean> list = JSON.parseArray(obj.getString("list"), DailyTaskBean.class);
recyclerView.setAdapter(new DailyTaskAdapter(mContext, list));
}
}
});
}
```c
```c
public void setLiveUid(String liveUid) {
mLiveUid = liveUid;
}
@Override
public void onDestroy() {
LiveHttpUtil.cancel(LiveHttpConsts.GET_DAILY_TASK);
LiveHttpUtil.cancel(LiveHttpConsts.DAILY_TASK_REWARD);
super.onDestroy();
}
}
public class DailyTaskAdapter extends RefreshAdapter<DailyTaskBean> {
private View.OnClickListener mOnClickListener;
private String mStatus0;
private String mStatus1;
private String mStatus2;
private int mColor0;
private int mColor1;
private Drawable mDrawable0;
private Drawable mDrawable1;
public DailyTaskAdapter(Context context, List<DailyTaskBean> list) {
super(context, list);
mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) v.getTag();
DailyTaskBean bean = mList.get(position);
if (bean.getStatus() == 1) {//可领取
final int finalPosition = position;
final DailyTaskBean finalBean = bean;
LiveHttpUtil.dailyTaskReward(bean.getId(), new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
finalBean.setStatus(2);
notifyItemChanged(finalPosition, Constants.PAYLOAD);
}
ToastUtil.show(msg);
}
});
}
}
};
mStatus0 = WordUtil.getString(R.string.daily_task_0);
mStatus1 = WordUtil.getString(R.string.daily_task_1);
mStatus2 = WordUtil.getString(R.string.daily_task_2);
mColor0 = ContextCompat.getColor(mContext, R.color.gray3);
mColor1 = ContextCompat.getColor(mContext, R.color.white);
mDrawable0 = ContextCompat.getDrawable(mContext, R.drawable.bg_daily_task_03);
mDrawable1 = ContextCompat.getDrawable(mContext, R.drawable.bg_daily_task_04);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new Vh(mInflater.inflate(R.layout.item_daily_task, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder vh, int i) {
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder vh, int i, @NonNull List payloads) {
Object payload = payloads.size() > 0 ? payloads.get(0) : null;
((Vh) vh).setData(mList.get(i), i, payload);
}
class Vh extends RecyclerView.ViewHolder {
TextView mTitle;
TextView mTip;
TextView mStatus;
View mLine;
public Vh(@NonNull View itemView) {
super(itemView);
mTitle = itemView.findViewById(R.id.title);
mTip = itemView.findViewById(R.id.tip);
mStatus = itemView.findViewById(R.id.btn_status);
mLine = itemView.findViewById(R.id.line);
mStatus.setOnClickListener(mOnClickListener);
}
void setData(DailyTaskBean bean, int position, Object payload) {
if (payload == null) {
mTitle.setText(bean.getTitle());
mTip.setText(bean.getTip());
mStatus.setTag(position);
if (position == mList.size() - 1) {
if (mLine.getVisibility() == View.VISIBLE) {
mLine.setVisibility(View.INVISIBLE);
}
} else {
if (mLine.getVisibility() != View.VISIBLE) {
mLine.setVisibility(View.VISIBLE);
}
}
}
int status = bean.getStatus();
if (status == 0) {
mStatus.setText(mStatus0);
mStatus.setBackground(null);
mStatus.setTextColor(mColor0);
} else {
if (status == 1) {
mStatus.setText(mStatus1);
mStatus.setBackground(mDrawable1);
} else {
mStatus.setText(mStatus2);
mStatus.setBackground(mDrawable0);
}
mStatus.setTextColor(mColor1);
}
}
}
}
De esta manera, la función de tarea diaria se realiza en el código fuente del sistema de transmisión en vivo. Ahora la industria de desarrollo de software de transmisión en vivo nacional tiene una gran cantidad de talentos, y siempre hay muchas funciones interesantes lanzadas. Little Cloud Leopard liberará gradualmente un código fuente de transmisión en vivo para compartir con usted en el futuro, por favor esperar.
Descargo de responsabilidad: Este artículo del autor: original oficial de Clouded Leopard Technology, reproducido, indique la fuente y el autor.