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>

即可實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章