Android 接入美洽

  1. 在app下加入
    //    api project(':meiqiasdk')
    // -------------------- 以下三个库是必须依赖的 ----------------------------
    implementation 'com.meiqia:meiqiasdk:+'
    implementation 'com.android.support:support-v4:29.0.0'
    implementation 'com.squareup.okhttp3:okhttp:3.5.0'
    // -------------------- 以上三个库是必须依赖的 ----------------------------

    // 目前支持常见的 4 种图片加载库,必须在下面四个图片加载库中选择一个添加依赖
//    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//    implementation 'com.squareup.picasso:picasso:2.5.2'
//    implementation 'org.xutils:xutils:3.3.36'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
//    implementation 'com.github.bumptech.glide:glide:3.7.0'

可以看下我的配置
在这里插入图片描述

mainActivity布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/MQMatchMatch.Vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <ImageView
            style="@style/MQWrapWrap"
            android:layout_centerInParent="true"
            android:layout_margin="16dp"
            android:src="@drawable/ic_logo" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:gravity="center_horizontal"
        android:orientation="vertical">


        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            style="@style/AppTheme"
            android:layout_marginBottom="8dp"
            android:onClick="conversation"
            android:text="咨询客服" />

<!--        <Button-->
<!--            android:layout_width="wrap_content"-->
<!--            android:layout_height="wrap_content"-->
<!--            style="@style/AppTheme"-->
<!--            android:layout_marginBottom="8dp"-->
<!--            android:onClick="developer"-->
<!--            android:text="开发者功能" />-->

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/AppTheme"
            android:layout_marginBottom="8dp"
            android:onClick="customizedConversation"
            android:text="自定义 Conversation" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/AppTheme"
            android:onClick="leaveMessageForm"
            android:text="留言表单" />

    </LinearLayout>

</LinearLayout>

MainActivity代码

package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;

import com.meiqia.meiqiasdk.activity.MQMessageFormActivity;
import com.meiqia.meiqiasdk.util.MQIntentBuilder;
import com.meiqia.meiqiasdk.util.MQUtils;

public class MainActivity extends AppCompatActivity {

    private static final int WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    /**
     * 咨询客服
     *
     * @param v
     */
    public void conversation(View v) {
        // 不兼容Android6.0动态权限
//        conversation();

        // 兼容Android6.0动态权限
        conversationWrapper();
    }

    /**
     * 开发者功能
     *
     * @param v
     */
    public void developer(View v) {
        startActivity(new Intent(MainActivity.this, ApiSampleActivity.class));
    }
    /**
     * 自定义 Activity
     *
     * @param view
     */
    public void customizedConversation(View view) {
        Intent intent = new MQIntentBuilder(this, CustomizedMQConversationActivity.class).build();
        startActivity(intent);
    }
    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case WRITE_EXTERNAL_STORAGE_REQUEST_CODE: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    conversationWrapper();
                } else {
                    MQUtils.show(this, com.meiqia.meiqiasdk.R.string.mq_sdcard_no_permission);
                }
                break;
            }
        }

    }

    private void conversationWrapper() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
        } else {
            conversation();
        }
    }

    private void conversation() {
        Intent intent = new MQIntentBuilder(this).build();
        startActivity(intent);
    }

    public void leaveMessageForm(View view) {
        startActivity(new Intent(this, MQMessageFormActivity.class));
    }
}

初始化Application

package com.example.myapplication;

import android.app.Application;
import android.content.Intent;
import android.widget.Toast;

import com.meiqia.core.MQManager;
import com.meiqia.core.callback.OnInitCallback;
import com.meiqia.meiqiasdk.util.MQConfig;

/**
 * name : 张鹏宇
 * Telephone :15699990074
 * City :Beijing
 * autograph :The original people give you the calm love 💎Accompany you to see the long and thin scenery
 * Date : 2020/4/17
 */
public class App extends Application {
    @Override
    public void onCreate() {

        super.onCreate();
        initMeiqiaSDK();
        MQManager.setDebugMode(true);
    }

    private void initMeiqiaSDK() {
        //初始化Activity
        MQManager.setDebugMode(true);
//        b70c8d1819c7e61686fde9f5c7a305d0
        String meiqiaKey = "b70c8d1819c7e61686fde9f5c7a305d0";
        MQConfig.init(this, meiqiaKey, new OnInitCallback() {
            @Override
            public void onSuccess(String s) {
                //成功的方法
                Toast.makeText(App.this, "成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int code, String message) {
                //失败的方法
                Toast.makeText(App.this, "失败 = " + message, Toast.LENGTH_SHORT).show();
            }
        });
        customMeiqiaSDK();
    }

    private void customMeiqiaSDK() {
        // 配置自定义信息
        MQConfig.ui.titleGravity = MQConfig.ui.MQTitleGravity.LEFT;
        MQConfig.ui.backArrowIconResId = R.drawable.ic_arrow_back_white_24dp;
//        MQConfig.ui.titleBackgroundResId = R.color.test_red;
//        MQConfig.ui.titleTextColorResId = R.color.test_blue;
//        MQConfig.ui.leftChatBubbleColorResId = R.color.test_green;
//        MQConfig.ui.leftChatTextColorResId = R.color.test_red;
//        MQConfig.ui.rightChatBubbleColorResId = R.color.test_red;
//        MQConfig.ui.rightChatTextColorResId = R.color.test_green;
//        MQConfig.ui.robotEvaluateTextColorResId = R.color.test_red;
//        MQConfig.ui.robotMenuItemTextColorResId = R.color.test_blue;
//        MQConfig.ui.robotMenuTipTextColorResId = R.color.test_blue;
    }
}

在这里插入图片描述

集成自 MQConversationActivity

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.meiqia.meiqiasdk.activity.MQConversationActivity;
/**
 * 集成自 MQConversationActivity,可以动态改变其中的一些方法实现
 */
public class CustomizedMQConversationActivity extends MQConversationActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 这里可以动态添加一些 View 到布局中
        // eg: 右边添加一个按钮
        RelativeLayout titleRL = (RelativeLayout) findViewById(R.id.title_rl);
        Button rightBtn = new Button(this);
        rightBtn.setText("RightBtn");
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        titleRL.addView(rightBtn, params);

        // do something
        rightBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(CustomizedMQConversationActivity.this, "RightBtn OnClick", Toast.LENGTH_SHORT).show();
            }
        });
    }

}

ApiSampleActivity

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.meiqia.core.MQManager;
import com.meiqia.core.MQScheduleRule;
import com.meiqia.core.bean.MQMessage;
import com.meiqia.core.callback.OnEndConversationCallback;
import com.meiqia.core.callback.OnGetMQClientIdCallBackOn;
import com.meiqia.core.callback.OnGetMessageListCallback;
import com.meiqia.meiqiasdk.controller.ControllerImpl;
import com.meiqia.meiqiasdk.util.MQConfig;
import com.meiqia.meiqiasdk.util.MQIntentBuilder;
import com.meiqia.meiqiasdk.util.MQUtils;

import java.util.HashMap;
import java.util.List;

public class ApiSampleActivity extends Activity implements View.OnClickListener {

    private TextView currentIdTv;
    private View setCurrentIdOnlineBtn;
    private View setInputIdOnlineBtn;
    private View setCustomizedIdOnlineBtn;
    private View getNewIdBtn;
    private View setAgentTokenOnlineBtn;
    private View setGroupTokenOnlineBtn;
    private View setClientInfoBtn;
    private View getUnreadMessageBtn;
    private View offlineClientBtn;
    private View endConversationBtn;

    private MQManager mqManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_developer);
        mqManager = MQManager.getInstance(this);

        findViews();
        setListeners();
        updateId();
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            // 使用当前顾客上线
            case R.id.set_current_client_id_online_btn:
                MQConfig.registerController(new ControllerImpl(this));
                Intent intent = new MQIntentBuilder(this).build();
                startActivity(intent);
                break;
            // 使用指定 美洽顾客id 上线
            case R.id.set_meiqia_client_id_online_btn:
                showDialog("输入美洽 ID", new EditDialogOnClickListener() {
                    @Override
                    public void onInput(String clientId) {
                        if (!TextUtils.isEmpty(clientId)) {
                            Intent intent = new MQIntentBuilder(ApiSampleActivity.this)
                                    .setClientId(clientId)
                                    .build();
                            startActivity(intent);
                            updateId();
                        }
                    }
                });
                break;
            // 使用 开发者用户id 上线
            case R.id.set_customised_id_online_btn:
                showDialog("209113", new EditDialogOnClickListener() {
                    @Override
                    public void onInput(String customizedId) {
                        if (!TextUtils.isEmpty(customizedId)) {
                            Intent intent = new MQIntentBuilder(ApiSampleActivity.this)
                                    .setCustomizedId(customizedId)
                                    .build();
                            startActivity(intent);
                            updateId();
                        }
                    }
                });
                break;
            // 获取一个新的美洽 ID
            case R.id.get_new_meiqia_id_btn:
                MQManager.getInstance(this).createMQClient(new OnGetMQClientIdCallBackOn() {
                    @Override
                    public void onSuccess(String mqClientId) {
                        toast("成功复制到剪贴板 :\n" + mqClientId);
                        if (!TextUtils.isEmpty(mqClientId)) {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                                android.content.ClipboardManager mClipboard = (android.content.ClipboardManager) ApiSampleActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
                                mClipboard.setPrimaryClip(ClipData.newPlainText("mq_content", mqClientId));
                            } else {
                                ClipboardManager mClipboard = (ClipboardManager) ApiSampleActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
                                mClipboard.setText(mqClientId);
                            }
                        }
                    }

                    @Override
                    public void onFailure(int code, String message) {
                        toast(message);
                    }
                });
                break;
            // 指定客服分配上线
            case R.id.set_specified_agent_token_btn:
                showDialog("c91e19c0c04b09aa1e2d4afd821e4af5", new EditDialogOnClickListener() {
                    @Override
                    public void onInput(String agentId) {
                        if (!TextUtils.isEmpty(agentId)) {
                            Intent intent = new MQIntentBuilder(ApiSampleActivity.this)
                                    .setScheduledAgent(agentId)
                                    .setScheduleRule(MQScheduleRule.REDIRECT_ENTERPRISE)
                                    .build();
                            startActivity(intent);
                            updateId();
                        }
                    }
                });
                break;
            // 指定客服分组分配上线
            case R.id.set_specified_agent_group_token_btn:
                showDialog("15c56fbe79d807127c6a923082ef2b9e", new EditDialogOnClickListener() {
                    @Override
                    public void onInput(String groupId) {
                        if (!TextUtils.isEmpty(groupId)) {
                            Intent intent = new MQIntentBuilder(ApiSampleActivity.this)
                                    .setScheduledGroup(groupId)
                                    .setScheduleRule(MQScheduleRule.REDIRECT_ENTERPRISE)
                                    .build();
                            startActivity(intent);
                        }
                    }
                });
                break;
            // 上传自定义信息
            case R.id.set_client_info:
                MQConfig.isShowClientAvatar = true;
                final HashMap<String, String> info = new HashMap<>();
                info.put("name", "乔嘉宝");
                info.put("avatar", " www.baidu.com");
                info.put("gender", "男");
                info.put("tel", "183");
                info.put("技能1", "java");
                info.put("技能2", "妹子");
                info.put("技能3", "打麻将");
                info.put("tags", "test1,test2,test3");
                AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
                alertBuilder.setTitle("上传自定义信息");
                alertBuilder.setMessage("avatar -> https://s3.cn-north-1.amazonaws.com.cn/pics.meiqia.bucket/1dee88eabfbd7bd4\n" +
                        "name -> 乔嘉宝\n" +
                        "技能1 -> 休刊\n" +
                        "gender -> 男\n" +
                        "tel -> 183\n" +
                        "技能2 -> 外出取材\n" +
                        "技能3 -> 打麻将");
                AlertDialog dialog = alertBuilder.create();
                dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new MQIntentBuilder(ApiSampleActivity.this)
                                .setClientInfo(info)
                                .build();
                        startActivity(intent);
                    }
                });
                dialog.show();
                break;
            case R.id.get_unread_message_btn:
                AlertDialog.Builder unreadAlertBuilder = new AlertDialog.Builder(this);
                unreadAlertBuilder.setTitle("注意");
                unreadAlertBuilder.setMessage("退出界面后收到的消息,都将算作未读消息");
                AlertDialog unreadDialog = unreadAlertBuilder.create();
                unreadDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        MQManager.getInstance(ApiSampleActivity.this).getUnreadMessages(new OnGetMessageListCallback() {
                            @Override
                            public void onSuccess(List<MQMessage> messageList) {
                                toast("unread message count = " + messageList.size());
                            }

                            @Override
                            public void onFailure(int code, String message) {
                                toast("get unread message failed");
                            }
                        });
                    }
                });
                unreadDialog.show();
                break;
            // 设置顾客离线
            case R.id.set_client_offline_btn:
                MQManager.getInstance(this).setClientOffline();
                break;
            // 结束当前对话
            case R.id.end_conversation_btn:
                MQManager.getInstance(this).endCurrentConversation(new OnEndConversationCallback() {
                    @Override
                    public void onSuccess() {
                        toast("endCurrentConversation success");
                    }

                    @Override
                    public void onFailure(int code, String message) {
                        toast("endCurrentConversation failed:\n" + message);
                    }
                });
                break;
        }
    }

    private void updateId() {
        currentIdTv.setText(mqManager.getCurrentClientId());
    }

    private void toast(String content) {
        Toast.makeText(ApiSampleActivity.this, content, Toast.LENGTH_LONG).show();
    }

    private void setListeners() {
        setCurrentIdOnlineBtn.setOnClickListener(this);
        setInputIdOnlineBtn.setOnClickListener(this);
        setCustomizedIdOnlineBtn.setOnClickListener(this);
        getNewIdBtn.setOnClickListener(this);
        setAgentTokenOnlineBtn.setOnClickListener(this);
        setGroupTokenOnlineBtn.setOnClickListener(this);
        setClientInfoBtn.setOnClickListener(this);
        getUnreadMessageBtn.setOnClickListener(this);
        offlineClientBtn.setOnClickListener(this);
        endConversationBtn.setOnClickListener(this);
    }

    private void findViews() {
        currentIdTv = (TextView) findViewById(R.id.current_id_tv);
        setCurrentIdOnlineBtn = findViewById(R.id.set_current_client_id_online_btn);
        setInputIdOnlineBtn = findViewById(R.id.set_meiqia_client_id_online_btn);
        setCustomizedIdOnlineBtn = findViewById(R.id.set_customised_id_online_btn);
        getNewIdBtn = findViewById(R.id.get_new_meiqia_id_btn);
        setAgentTokenOnlineBtn = findViewById(R.id.set_specified_agent_token_btn);
        setGroupTokenOnlineBtn = findViewById(R.id.set_specified_agent_group_token_btn);
        setClientInfoBtn = findViewById(R.id.set_client_info);
        getUnreadMessageBtn = findViewById(R.id.get_unread_message_btn);
        offlineClientBtn = findViewById(R.id.set_client_offline_btn);
        endConversationBtn = findViewById(R.id.end_conversation_btn);
    }


    private void showDialog(String title, final EditDialogOnClickListener editDialogOnClickListener) {
        final Dialog inputDialog = new Dialog(this, R.style.MQDialog);
        inputDialog.setCancelable(true);
        inputDialog.setContentView(R.layout.dialog_input);
        TextView titleTv = (TextView) inputDialog.findViewById(R.id.tv_input_title);
        titleTv.setText(title);
        final EditText valueEt = (EditText) inputDialog.findViewById(R.id.et_input_value);
        inputDialog.findViewById(R.id.tv_input_confirm).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MQUtils.closeKeyboard(inputDialog);
                inputDialog.dismiss();
                editDialogOnClickListener.onInput(valueEt.getText().toString());
            }
        });
        inputDialog.show();
        MQUtils.openKeyboard(valueEt);
    }

    public interface EditDialogOnClickListener {
        void onInput(String input);
    }
}

Actity_developer.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/MQMatchMatch.Vertical">

    <LinearLayout
        style="@style/MQMatchWrap.Horizontal"
        android:background="@color/mq_colorPrimary"
        android:padding="8dp">

        <TextView
            style="@style/MQWrapWrap"
            android:text="当前美洽ID: "
            android:textColor="@android:color/white"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/current_id_tv"
            style="@style/MQMatchWrap"
            android:textColor="@android:color/white"
            android:textSize="14sp"
            tools:text="ididididiididid" />
    </LinearLayout>

    <ScrollView style="@style/MQMatchMatch">

        <LinearLayout
            style="@style/MQMatchMatch.Vertical"
            android:paddingBottom="16dp">

            <Button
                android:id="@+id/set_current_client_id_online_btn"
                style="@style/AppTheme"
                android:text="使用当前顾客 ID 上线" />

            <Button
                android:id="@+id/set_meiqia_client_id_online_btn"
                style="@style/AppTheme"
                android:text="输入美洽顾客 ID 进行上线" />

            <Button
                android:id="@+id/set_customised_id_online_btn"
                style="@style/AppTheme"
                android:text="绑定用户 ID 并上线" />

            <Button
                android:id="@+id/get_new_meiqia_id_btn"
                style="@style/AppTheme"
                android:text="获取一个全新的美洽 ID" />

            <Button
                android:id="@+id/set_specified_agent_token_btn"
                style="@style/AppTheme"
                android:text="输入一个客服 ID 进行指定分配" />

            <Button
                android:id="@+id/set_specified_agent_group_token_btn"
                style="@style/AppTheme"
                android:text="输入一个客服组 ID 进行指定分配" />

            <Button
                android:id="@+id/set_client_info"
                style="@style/AppTheme"
                android:text="上传自定义信息" />

            <Button
                android:id="@+id/get_unread_message_btn"
                style="@style/AppTheme"
                android:text="获取未读消息数目" />

            <Button
                android:id="@+id/set_client_offline_btn"
                style="@style/AppTheme"
                android:text="设置当前顾客为离线状态" />

            <Button
                android:id="@+id/end_conversation_btn"
                style="@style/AppTheme"
                android:text="结束当前对话" />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

dlilog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/MQMatchWrap.Vertical"
    android:layout_marginLeft="@dimen/mq_size_level8"
    android:layout_marginRight="@dimen/mq_size_level8"
    android:background="@drawable/mq_shape_dialog_bg">

    <TextView
        android:id="@+id/tv_input_title"
        style="@style/MQMatchWrap"
        android:gravity="center"
        android:padding="@dimen/mq_size_level4"
        android:textColor="@android:color/black"
        android:textSize="@dimen/mq_textSize_level2"
        android:textStyle="bold"
        tools:text="我是标题" />

    <EditText
        android:id="@+id/et_input_value"
        style="@style/MQMatchWrap"
        android:layout_marginBottom="@dimen/mq_size_level4"
        android:layout_marginLeft="@dimen/mq_size_level4"
        android:layout_marginRight="@dimen/mq_size_level4"
        android:background="@drawable/mq_bg_edit_view"
        android:padding="@dimen/mq_size_level2"
        android:textColor="@android:color/black"
        android:textSize="@dimen/mq_textSize_level2"
        tools:text="skdfjksldjflsk" />

    <View style="@style/MQHLine" />

    <TextView
        android:id="@+id/tv_input_confirm"
        style="@style/MQClickableItem.Bottom"
        android:gravity="center"
        android:text="确定" />

</LinearLayout>

即可实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值