Skip to content

Setup for Version 2.x.x

Kuei-Jung Hu edited this page Jul 20, 2020 · 2 revisions

Initialisation

Initialize Virtusize object in your Application class's onCreate method using the VirtusizeBuilder to set up the configuration. Possible configuration methods are shown as the following table:

VirtusizeBuilder

Method Argument Type Example Description Requirement
setApiKey String setApiKey("api_key") A unique API key is provided to each Virtusize client. Yes
setUserId String setUserId("123") It's passed from the client if the user is logged into the client's app. Yes, if the Order API is used.
setEnv VirtusizeEnvironment setEnv(VirtusizeEnvironment.STAGING) The environment is the region you are running the integration from, either VirtusizeEnvironment.STAGING, VirtusizeEnvironment.GLOBAL, VirtusizeEnvironment.JAPAN or VirtusizeEnvironment.KOREA. No, by default, the Virtusize environment will be set to VirtusizeEnvironment.GLOBAL.
setLanguage VirtusizeLanguage setLanguage(VirtusizeLanguage.EN) It sets the initial language that the integration will load in. The possible values are VirtusizeLanguage.EN, VirtusizeLanguage.JP and VirtusizeLanguage.KR No, by default, the initial language will be set based on the Virtusize environment.
setShowSGI Boolean setShowSGI(true) It determines whether the integration will fetch SGI and use SGI flow for users to add user generated items to their wardrobe. No, by default, ShowSGI is set to false
setAllowedLanguages A list of VirtusizeLanguage In Kotlin, setAllowedLanguages(mutableListOf(VirtusizeLanguage.EN, VirtusizeLanguage.JP))
In Java, setAllowedLanguages(Arrays.asList(VirtusizeLanguage.EN, VirtusizeLanguage.JP))
The languages that the user can switch to using the Language Selector No, by default, the integration allows all the possible languages to be displayed, including English, Japanese and Korean.
setDetailsPanelCards A list of VirtusizeInfoCategory In Kotlin, setDetailsPanelCards(mutableListOf(VirtusizeInfoCategory.BRAND_SIZING, VirtusizeInfoCategory.GENERAL_FIT))
In Java, setDetailsPanelCards(Arrays.asList(VirtusizeInfoCategory.BRAND_SIZING, VirtusizeInfoCategory.GENERAL_FIT))
The info categories that will be display in the Product Details tab. Possible categories are: VirtusizeInfoCategory.MODEL_INFO, VirtusizeInfoCategory.GENERAL_FIT, VirtusizeInfoCategory.BRAND_SIZING and VirtusizeInfoCategory.MATERIAL No, by default, the integration displays all the possible info categories in the Product Details tab.
  • Kotlin

    lateinit var Virtusize: Virtusize
    override fun onCreate() {
        super.onCreate()
       Virtusize = VirtusizeBuilder().init(this)
                // Only the API key is required
                .setApiKey("15cc36e1d7dad62b8e11722ce1a245cb6c5e6692")
                // For using the Order API, a user ID is required
                .setUserId("123")
                // By default, the Virtusize environment will be set to GLOBAL
                .setEnv(VirtusizeEnvironment.STAGING)
                // By default, the initial language will be set based on the Virtusize environment
                .setLanguage(VirtusizeLanguage.EN)
                // By default, ShowSGI is false
                .setShowSGI(true)
                // By default, Virtusize allows all the possible languages
                .setAllowedLanguages(mutableListOf(VirtusizeLanguage.EN, VirtusizeLanguage.JP))
                // By default, Virtusize displays all the possible info categories in the Product Details tab
                .setDetailsPanelCards(mutableListOf(VirtusizeInfoCategory.BRAND_SIZING, VirtusizeInfoCategory.GENERAL_FIT))
                .build()
    }
  • Java

    Virtusize Virtusize;
    
    @Override
    public void onCreate() {
       super.onCreate();
            // Initialize Virtusize instance for your application
            Virtusize = new VirtusizeBuilder().init(this)
                    // Only the API key is required
                    .setApiKey("15cc36e1d7dad62b8e11722ce1a245cb6c5e6692")
                    // For using the Order API, a user ID is required
                    .setUserId("123")
                    // By default, the Virtusize environment will be set to GLOBAL
                    .setEnv(VirtusizeEnvironment.STAGING)
                    // By default, the initial language will be set based on the Virtusize environment
                    .setLanguage(VirtusizeLanguage.EN)
                    // By default, ShowSGI is false
                    .setShowSGI(true)
                    // By default, Virtusize allows all the possible languages
                    .setAllowedLanguages(Arrays.asList(VirtusizeLanguage.EN, VirtusizeLanguage.JP))
                    // By default, Virtusize displays all the possible info categories in the Product Details tab
                    .setDetailsPanelCards(Arrays.asList(VirtusizeInfoCategory.BRAND_SIZING, VirtusizeInfoCategory.GENERAL_FIT))
                    .build();

Add button to layout

Add Virtusize button in your activity's XML layout file. You can use the default button style we provide by setting up app:virtusizeButtonStyle="default_style" in XML or programmatically.

  • XML

    <com.virtusize.libsource.ui.VirtusizeButton
        android:id="@+id/exampleVirtusizeButton"
        app:virtusizeButtonStyle="default_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  • Kotlin

    exampleVirtusizeButton.buttonStyle = VirtusizeButtonStyle.DEFAULT_STYLE
  • Java

    virtusizeButton.setButtonStyle(VirtusizeButtonStyle.DEFAULT_STYLE);

You can also use any other button styles and/or define attributes like text, height, width, etc on the VirtusizeButton.

<com.virtusize.libsource.ui.VirtusizeButton
    android:id="@+id/exampleVirtusizeButton"
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/virtusize_button_text" />

Setup button

Inside your activity, setup the Virtusize button using product details by passing a imageUrl of the product in order to populate the comparison view and passing in an externalId that will be used to reference that product in our API

  • Kotlin

    (application as App)
    .Virtusize
    .setupVirtusizeButton(
        virtusizeButton = exampleVirtusizeButton,
        virtusizeProduct = VirtusizeProduct(externalId = "694", imageUrl = "http://simage-kr.uniqlo.com/goods/31/12/11/71/414571_COL_COL02_570.jpg"))
  • Java

    VirtusizeButton virtusizeButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        virtusizeButton = findViewById(R.id.exampleVirtusizeButton);
        App app = (App) getApplication();
        app.Virtusize.setupVirtusizeButton(virtusizeButton, new VirtusizeProduct("694", "https://www.publicdomainpictures.net/pictures/120000/velka/dress-1950-vintage-style.jpg"));
    }

Close the Virtusize widget manually

  • Kotlin

     exampleVirtusizeButton.dismissVirtusizeView()
  • Java

     exampleVirtusizeButton.dismissVirtusizeView();

Setup Virtusize Message Handler

Please do not forget to unregister message handler in activity or fragment's lifecycle method before it dies or is removed. See next section on how to.

  • Kotlin

     private val activityMessageHandler = object : VirtusizeMessageHandler {
         override fun virtusizeControllerShouldClose(virtusizeButton: VirtusizeButton) {
             Log.i(TAG, "Close Virtusize View")
             virtusizeButton.dismissVirtusizeView()
         }
    
         override fun onEvent(virtusizeButton: VirtusizeButton?, event: VirtusizeEvent) {
             Log.i(TAG, event.name)
         }
    
         override fun onError(virtusizeButton: VirtusizeButton?, errorType: VirtusizeError) {
             Log.e(TAG, errorType.message)
         }
     }
     override fun onCreate(savedInstanceState: Bundle?) {
         //...
         // Register message handler to listen to events from Virtusize
         (application as App)
             .Virtusize.registerMessageHandler(activityMessageHandler)
         //...
     }
  • Java

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         //...
         App app = (App) getApplication();
         app.Virtusize.registerMessageHandler(new VirtusizeMessageHandler() {
             @Override
             public void virtusizeControllerShouldClose(@NotNull VirtusizeButton virtusizeButton) {
                 Log.i(TAG, "Close Virtusize View");
             }
    
             @Override
             public void onEvent(@org.jetbrains.annotations.Nullable VirtusizeButton virtusizeButton, @NotNull VirtusizeEvent event) {
                 Log.i(TAG, event.getName());
             }
    
             @Override
             public void onError(VirtusizeButton virtusizeButton, @NonNull VirtusizeError error) {
                 Log.e(TAG, error.getMessage());
             }
         });
     }

Unregister Virtusize Message Handler

A message handler is tied to an activity or fragment's lifecycle but Virtusize library object is tied to application's lifecycle. So if you forget to unregister message handler then it will keep listening to events even after activity is dead or fragment has been removed. In case of activity depending on where in the lifecycle did you register message handler you may need to unregister it in your onPause or onStop method before super method is called. Follow same guidelines in case of fragment as well.

  • Kotlin

     private val activityMessageHandler: VirtusizeMessageHandler
         override fun onPause() {
             // Always un register message handler in onPause() or depending on implementation onStop().
             (application as App)
                 .Virtusize.unregisterMessageHandler(activityMessageHandler)
              super.onPause()
         }
  • Java

     @Override
         protected void onPause() {
             app.Virtusize.unregisterMessageHandler(virtusizeMessageHandler);
             super.onPause();
         }

Clone this wiki locally