Android Library

Mluvii poskytuje library pro integraci s vaší aplikací. Minimální verze Androidu je 5.0, protože v nižších verzích není webview postaveno na Chromiu, které se samo aktualizuje a proto je zastaralé. Námi poskytnutý kód umožňuje:

  • inicializace webview s widgetem s údaji vaší společnosti
    MluviiLibrary.getMluviiWebView(Context, Název_serveru, ID_Společnosti, ID_Tenantu, Název_balíčku, jazyk);
    
  • oznámení o změně stavu widgetu
    MluviiLibrary.setStatusOnlineCallback(() ->{});
    MluviiLibrary.setStatusBusyCallback(() ->{});
    MluviiLibrary.setStatusOfflineCallback(() ->{});
    
  • otevření chatu
    MluviiLibrary.runChat();
    
  • zavření chatu a načtení stránky s widgetem
    MluviiLibrary.setCloseChatFunc(() ->{});
    
  • přidání vlastních parametrů - u přidání vlastních parametrů je nutné je nejdříve nastavit povolené parametry v Administračním rozhraní viz. Aplikace

    MluviiLibrary.addCustomData("name","param");
    
  • Pro správné fungování mluvii je také doporučeno povolit cookies ve WebView

    if (android.os.Build.VERSION.SDK_INT >= 21) {   
      CookieManager.getInstance().setAcceptThirdPartyCookies(mluviiWebView, true);
    } else {
      CookieManager.getInstance().setAcceptCookie(true);
    }
    
  • Aby bylo možné posílat soubory do chatu, je nutné přidat následující část kódu do vašeho projektu

     protected void onActivityResult(int requestCode, int resultCode, Intent data){
         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             if (requestCode == REQUEST_SELECT_FILE) {
                 uploadMessages = MluviiLibrary.getFilePathCallbacks();
                 if (uploadMessage == null) return;
                 uploadMessages.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
                 uploadMessages = null;
             }
         } else{
             uploadMessage = MluviiLibrary.getFilePathCallback();
             if (null == uploadMessage)
                 return;
             Uri result = data == null || resultCode != MainActivity.RESULT_OK ? null : data.getData();
             uploadMessage.onReceiveValue(result);
             uploadMessage = null;
         }
     }
    

    REQUEST_SELECT_FILE je defaultně nastaven na 65456, ale hodnotu lze změnit zavoláním následující funkce:

    MluviiLibrary.setSelectFileNumber(hodnota);
    

uploadMessages a uploadMessage jsou proměnné definované takto:

 public ValueCallback<Uri[]> uploadMessages;
    public ValueCallback<Uri> uploadMessage;
  • Aby bylo možné využívat audia a videa v aplikaci, je nutné Povolit práva pro přístup ke kameře a mikrofonu

Jako první část je nutné přidat do manifestu

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.CAMERA" />

Druhá část je pro zařízení s verzí Androidu 6.0+, kde lze kontrolovat práva za běhu aplikace

 if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.CAMERA)) {
                //Can add explanation why do you need this specific permissions
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
                        REQUEST_CAMERA_PERMISSION);

            } else {
                // No explanation needed; request the permission
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
                        REQUEST_CAMERA_PERMISSION);
            }
        }
  • Pokud chcete používat video, je potřeba ve vašem produktu povolit kameru a mikrofon

Vzorový kód:

package mluviipoc.mluvii.com.webviewapp;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.mluvii.mluviilibrary.MluviiLibrary;

import java.util.concurrent.Callable;

public class MainActivity extends AppCompatActivity {

    private static String TAG = "MLUVII WEBVIEW APP";

    private static WebView mluviiWebView = null;


    /**
     * Inicializacni parametry pro Mluvii library webView
     */
    private static String mluviiServer = "app.mluvii.com";
    private static String mluviiCompanyId = "295b1064-cf5b-4a5d-9e05-e7a74f86ae5e";
    private static String mluviiTenantId = null;
    private static String mluviiPresetName = "DebitoTestSDK";
    private static String mluviiLanguageCode = null;

    /**
     * Current stat of the operators group
     */
    private static int status = 0;
    /**
     * Customer button to indicate state of the operator and invole the webview
     */
    private Button btn = null;

    /**
     * CHAT_URL points on the chat widget. There can be more urls changed within the client app to direst
     * chat to different operator groups/different widgets.
     */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /**
         * Callback na Online stav z widgetu
         */
        MluviiLibrary.setStatusOnlineCallback(new Callable<Void>()  {
            public Void call(){
                Log.d("MLUVII_STATUS", "STATUS ONLINE");
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        btn.setBackgroundColor(Color.parseColor("#00ff00"));
                        btn.setText("ONLINE");
                    }
                });
                status = 1;
                return null;
            }
        });

        /**
         * Callback na Busy stav z widgetu
         */
        MluviiLibrary.setStatusBusyCallback( new Callable<Void>()  {
            public Void call(){
                Log.d("MLUVII_STATUS", "STATUS BUSY");
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        btn.setBackgroundColor(Color.parseColor("#ffff00"));
                        btn.setText("BUSY");
                    }
                });
                status = 2;
                return null;
            }
        });

        /**
         * Callback na Offline stav z widgetu
         */
        MluviiLibrary.setStatusOfflineCallback( new Callable<Void>()  {
            public Void call(){
                status = 0;
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        btn.setBackgroundColor(Color.parseColor("#ff0000"));
                        btn.setText("OFFLINE");
                    }
                });
                Log.d("MLUVII_STATUS", "STATUS OFFLINE");
                return null;
            }
        });

        MluviiLibrary.setChatLoadedCallback( new Callable<Void>()  {
            public Void call(){
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        RelativeLayout.LayoutParams openedMluviiParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
                        mluviiWebView.setLayoutParams(openedMluviiParams);
                    }
                });
                return null;
            }
        });


        /**
         * Callback na Zavreni chatu - nutno reload puvodni URL neb chat widget to presmeruje
         */
        MluviiLibrary.setCloseChatFunc(new Callable<Void>() {
            @Override
            public Void call() throws Exception {
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        RelativeLayout.LayoutParams mluviiParams = new RelativeLayout.LayoutParams(0,0);
                        //mluviiWebView.loadUrl(CHAT_URL);
                        MluviiLibrary.resetUrl();
                        mluviiWebView.setLayoutParams(mluviiParams);
                    }
                });
                return null;
            }
        });

        /**
         * Definovani funkce pro kliknuti na odkaz
         */



        /**
         * Inicializace WebView z MluviiLibrary
         */
        mluviiWebView = MluviiLibrary.getMluviiWebView(this, mluviiServer,mluviiCompanyId, mluviiTenantId, mluviiPresetName, mluviiLanguageCode);
        /**
         * Nastaveni velikosti 0,0 na webview, aby nebylo videt, dokud neni potreba
         */
        RelativeLayout.LayoutParams mluviiParams = new RelativeLayout.LayoutParams(0,0);
        mluviiWebView.setLayoutParams(mluviiParams);


        /**
         * Tlaciko, ktere zobrazuje stav Widgetu - Seda, nespojeno se serverem - Cervena, offline - Zluta, busy - Zelena, online
         */
        btn = new Button(this);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(status == 1){
					MluviiLibrary.addCustomData("additionalParam","testValue");
                    MluviiLibrary.runChat();
                    RelativeLayout.LayoutParams openedMluviiParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
                    mluviiWebView.setLayoutParams(openedMluviiParams);
                }
            }
        });

        /**
         * Linear layout s Tlacitkem
         */
        LinearLayout linearLayout = new LinearLayout(this);
        LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        linearLayout.setLayoutParams(params1);
        linearLayout.addView(btn);

        /**
         * Nastaveni zakladniho layoutu
         */
        final RelativeLayout layout = new RelativeLayout(this);
        final RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        layout.addView(linearLayout);
        layout.addView(mluviiWebView);
        layout.setLayoutParams(params);
        setContentView(layout);
    }
}

results matching ""

    No results matching ""