用戶注冊
    服務商注冊
    服務商登錄

    APP接入莫鄰在線客服系統教程

    APP開發一般分原生開發和H5開發,接入方式有所不同。
    1.H5開發的APP可以使用客服代碼嵌入方式,也可以使用客服直連,和網頁接入沒有區别。
    2.原生代碼開發的APP通過webview組件嵌入客服直連的方式接入;如果需要支持語音發送,文件圖片傳輸等功能,需要做一些處理,請參考以下示例;
                    	
    package com.xxx.activity;
    
    import android.annotation.SuppressLint;
    import android.annotation.TargetApi;
    import android.app.Activity;
    import android.content.ActivityNotFoundException;
    import android.content.ContentValues;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.Handler;
    import android.provider.MediaStore;
    import android.text.TextUtils;
    import android.view.KeyEvent;
    import android.webkit.DownloadListener;
    import android.webkit.JavascriptInterface;
    import android.webkit.JsResult;
    import android.webkit.PermissionRequest;
    import android.webkit.ValueCallback;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Toast;
    
    import com.xxx.R;
    
    import java.io.File;
    
    public class MorningH5Activity extends AppCompatActivity {
        private ValueCallback mUploadMessage;
        private ValueCallback mUploadMessage5;
        public static final int FILECHOOSER_RESULTCODE = 5173;
        public static final int FILECHOOSER_RESULTCODE_FOR_ANDROID_5 = 5174;
    
        private WebView webView;
    
        @Override
        public void initView() {
            setContentView(R.layout.activity_worksheet_service);
            webView=(WebView) findViewById(R.id.web_view);
            WebSettings set = webView.getSettings();
            set.setJavaScriptEnabled(true);
            set.setUseWideViewPort(true);
            set.setLoadWithOverviewMode(true);
            set.setAllowFileAccess(true);
        }
    
        @Override
        public boolean onKeyDown(int keyCode ,KeyEvent keyEvent){
            if(keyCode==keyEvent.KEYCODE_BACK){//監聽返回鍵,如果可以後退就後退
                if(webView.canGoBack()){
                    webView.goBack();
                    return true;
                }
            }
            return super.onKeyDown(keyCode, keyEvent);
        }
    
        @Override
        public void initData(Bundle arg0) {
            webView.setWebChromeClient(new MyChromeClient());
    
            webView.setDownloadListener(new DownloadListener() {
                @Override
                public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.addCategory(Intent.CATEGORY_BROWSABLE);
                    intent.setData(Uri.parse(url));
                    startActivity(intent);
                }
            });
    
            String url=getIntent().getStringExtra("url");
            if (!TextUtils.isEmpty(url)){
                webView.loadUrl(url);
            }
        }
    
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            webView.destroy();
        }
    
        @SuppressLint("NewApi")
        @Override
        protected void onActivityResult(int requestCode, int resultCode,
                                        Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);
            if (requestCode == FILECHOOSER_RESULTCODE) {
                if (null == mUploadMessage) {
                    return;
                }
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
                        : intent.getData();
                mUploadMessage.onReceiveValue(result);
                mUploadMessage = null;
            } else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5) {
                if (null == mUploadMessage5) {
                    return;
                }
                mUploadMessage5.onReceiveValue(WebChromeClient.FileChooserParams
                        .parseResult(resultCode, intent));
                mUploadMessage5 = null;
            }
        }
    
    
        public class MyChromeClient extends WebChromeClient {
            @Override
            public void onPermissionRequest(PermissionRequest request) {
                if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
                    request.grant(request.getResources());
                    request.getOrigin();
                }
            }
    
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               // return super.onJsAlert(view, url, message, result);
                result.confirm();
                return true;
            }
    
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                if (title != null) {
                    tv_title.setText(title);
                }
            }
    
            // For Android < 3.0
            public void openFileChooser(ValueCallback uploadMsg){
                this.openFileChooser(uploadMsg, "*/*");
            }
    
            // For Android >= 3.0
            public void openFileChooser(ValueCallback uploadMsg,
                                        String acceptType) {
                this.openFileChooser(uploadMsg, acceptType, null);
            }
    
            // For Android >= 4.1
            public void openFileChooser(ValueCallback uploadMsg,
                                        String acceptType, String capture) {
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("*/*");
                startActivityForResult(Intent.createChooser(i, "文件浏覽"),
                        FILECHOOSER_RESULTCODE);
            }
    
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean onShowFileChooser(WebView mWebView,
                                             ValueCallback filePathCallback,
                                             WebChromeClient.FileChooserParams fileChooserParams) {
                if (mUploadMessage5 != null) {
                    mUploadMessage5.onReceiveValue(null);
                    mUploadMessage5 = null;
                }
                mUploadMessage5 = filePathCallback;
                Intent intent = fileChooserParams.createIntent();
                try {
                    startActivityForResult(intent,
                            FILECHOOSER_RESULTCODE_FOR_ANDROID_5);
                } catch (ActivityNotFoundException e) {
                    mUploadMessage5 = null;
                    return false;
                }
                return true;
            }
        }
    
    
    }