A Flutter plugin that wraps Virtusize Native SDKs for Android & iOS.
バーチャサイズは商品詳細ページにあるサイズ情報を元に、アイテムのサイズ感をシルエット化しお客様が購入されたい商品をオンライン上で比較しやすいようサポートをしてます。
詳しくはこちらをご確認ください。https://www.virtusize.com
実装作業を始められる前にバーチャサイズの御社ご担当者に「API キー」と「ストア名」をお訊ねください。
こちらは Flutter用実装ガイドです。 Webの実装はhttps://developers.virtusize.comをご確認ください。
-
iOS 14.0+
iOS バージョン
14.0以上をご利用されているかios/Podfileにてご確認ください。platform :ios, '14.0' -
Android 5.0+ (API Level 21+)
android/app/build.gradleを21以上をご利用されているかご確認の上、minSdkVersionを設定ください。android { defaultConfig { minSdkVersion 21 } }
-
pubspec.yaml fileに
virtusize_flutter_sdkを追加。dependencies: virtusize_flutter_sdk: ^2.2.10
-
flutter pub getをターミナルで実行または IntelliJ / Android Studio 内Pub getをクリックください。
(1) Proguardを使用している場合は、以下のルールをProguardルールファイルに追加してください:
-keep class com.virtusize.android.**
(2) SDKでVirtusizeのWebViewをFragment内で開けるようにするには、android/app/src/main/MainActivityでFlutterActivityの代わりにFlutterFragmentActivityを継承してください。
```diff
- import io.flutter.embedding.android.FlutterActivity
+ import io.flutter.embedding.android.FlutterFragmentActivity
- class MainActivity: FlutterActivity() {
+ class MainActivity: FlutterFragmentActivity() {
}
```
runAppを実行する前に、VirtusizeSDK.instance.setVirtusizeParams関数を使用してVirtusizeパラメーターを設定します。
import 'package:virtusize_flutter_sdk/virtusize_flutter_sdk.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await VirtusizeSDK.instance.setVirtusizeParams(
// Only the API key is required
apiKey: '15cc36e1d7dad62b8e11722ce1a245cb6c5e6692',
// For using the Order API, a user ID is also required. (can be set later)
userId: '123',
// By default, the Virtusize environment will be set to VSEnvironment.global
env: VSEnvironment.staging,
// By default, the initial language will be set according to the Virtusize environment
language: VSLanguage.jp,
// By default, ShowSGI is false
showSGI: true,
// By default, Virtusize allows all possible languages
allowedLanguages: [VSLanguage.en, VSLanguage.jp],
// By default, Virtusize displays all possible info categories in the Product Details tab
detailsPanelCards: [VSInfoCategory.generalFit, VSInfoCategory.brandSizing],
// By default, Virtusize does not show SNS buttons
showSNSButtons: true,
// Target the specific environment branch by its name
branch: 'branch-name',
);
runApp(MyApp());
}可能な引数構成を次の表に示します。
| データ形式 | タイプ | 例 | 説明 | 必須設定 |
|---|---|---|---|---|
| apiKey | String | 'api_key' | 担当者が用意した「API キー」遠設定ください。 | Yes |
| userId | String | '123' | ユーザーがクライアントのアプリにログインしている場合、クライアントから渡されます。 | Yes,OrderAPIが使用されている場合。 |
| env | VSEnvironment | VSEnvironment.staging | 設定環境は、統合を実行している地域のいずれかVSEnvironment.staging, VSEnvironment.global, VSEnvironment.japan または VSEnvironment.korea。 |
No. デフォルトでは、Virtusize環境は次のように設定されますVSEnvironment.global。 |
| language | VSLanguage | VSLanguage.jp | 統合がロードされる初期言語を設定します。可能な値は次のとおりです。VSLanguage.en, VSLanguage.jp および VSLanguage.kr |
No. デフォルトでは、初期言語はVirtusize環境に基づいて設定されます。 |
| showSGI | bool | true | ユーザーが生成したアイテムをワードローブに追加する方法として、SGIを取得の上、SGIフローを使用するかどうかを決定します。 | No. デフォルトではShowSGIはfalseに設定されています。 |
| allowedLanguages | List<VSLanguage> |
[VSLanguage.en, VSLanguage.jp] | ユーザーが言語選択ボタンより選択できる言語。 | 特になし。デフォルトでは、英語、日本語、韓国語など、表示可能なすべての言語が表示されるようになっています。 |
| detailsPanelCards | List<VSInfoCategory> |
[VSInfoCategory.generalFit, VSInfoCategory.brandSizing] | 商品詳細タブに表示する情報のカテゴリ。表示可能カテゴリは以下:VSInfoCategory.modelInfo, VSInfoCategory.generalFit, VSInfoCategory.brandSizing およびVSInfoCategory.material |
No. デフォルトでは、商品詳細タブに表示可能なすべての情報カテゴリが表示されます。 |
| showSNSButtons | bool | true | 統合時にユーザーにSNSボタンを表示するかどうかを決定します。 | No.デフォルトでは、統合時にSNSボタンは無効になっています。 |
| branch | String | 'branch-name' | 特定の環境ブランチを対象とします。 | デフォルトでは、本番環境が対象になります。staging を指定するとステージング環境が対象になります。<branch-name> を指定すると、特定のブランチが対象になります。 |
| showPrivacyPolicy | Boolean | showShowPrivacyPolicy: true | プライバシー ポリシーをユーザーに表示するかどうかを制御します。 | No. デフォルトでは、プライバシー ポリシーが表示されます。 |
商品詳細ページウィジェットのinitStateで、VirtusizeSDK.instance.loadVirtusizeを使用してVirtusizeウィジェットにデータを入力する必要があります。
VirtusizeClientProductオブジェクトを作成して以下情報を設定してください。- Virtusizeサーバーで商品詳細をロードするために使用される
exernalId - 商品画像の
imageURL
- Virtusizeサーバーで商品詳細をロードするために使用される
VirtusizeClientProductオブジェクトをVirtusizeSDK.instance.loadVirtusize関数に渡します。
/// Declare a global `VirtusizeClientProduct` variable,
/// which will be passed to the `Virtusize` widgets in order to bind the product info
VirtusizeClientProduct _product;
@override
void initState() {
super.initState();
_product = VirtusizeClientProduct(
// Set the product's external ID
externalProductId: 'vs_dress',
// Set the product image URL
imageURL: 'https://www.image.com/goods/12345.jpg'
);
VirtusizeSDK.instance.loadVirtusize(_product);
}ユーザーが同じ画面を表示しているときに製品を別の製品に更新する場合は、別のVirtusizeClientProductオブジェクトを_productに割り当て、setState()内のVirtusizeSDK.instance.loadVirtusizeを使用して製品を再読み込みし、ウィジェットを再構築します。
setState(() {
_product = VirtusizeClientProduct(
externalProductId: 'vs_pants',
imageURL: 'https://www.image.com/goods/12345.jpg'
);
VirtusizeSDK.instance.loadVirtusize(_product);
});VirtusizeMessageListenerを登録して、VirtusizeからのイベントとProductDataCheckの結果を確認できます。
VirtusizeSDK.instance.setVirtusizeMessageListener関数のすべての引数はオプションです。
@override
void initState() {
super.initState();
VirtusizeSDK.instance.setVirtusizeMessageListener(
VirtusizeMessageListener(
vsEvent: (eventName) {
print("Virtusize event: $eventName");
},
vsError: (error) {
print("Virtusize error: $error");
},
productDataCheckSuccess: (productDataCheck) {
print('ProductDataCheck success: $productDataCheck');
},
productDataCheckError: (error) {
print('ProductDataCheck error: $error');
}
)
);
}こちらが翻訳済みの日本語バージョンです(Markdown形式を維持しています):
SNS認証フローでは、Chrome Custom Tabを開いてユーザーがSNSアカウントでログインできるウェブページを読み込みます。ログインのレスポンスをChrome Custom Tabからアプリに返すためには、カスタムURLスキームを定義する必要があります。
AndroidManifest.xml ファイルを編集し、インテントフィルターおよびカスタムURLスキーム用の <data> タグを追加してください。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.your-company.your-app">
<activity android:name="com.virtusize.android.auth.views.VitrusizeAuthActivity"
android:launchMode="singleTask" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="sns-auth" android:scheme="com.your-company.your-app.virtusize" />
</intent-filter>
</activity>
</manifest>❗重要
- URLのホストは
sns-authである必要があります。 - URLスキームはアプリのパッケージID(
com.your-company.your-app)で始まり、.virtusizeで終わる必要があります。また、スキームはすべて小文字で定義してください。
SNS認証フローでは、SFSafariViewControllerに切り替えて、ユーザーがSNSアカウントでログインできるウェブページを読み込みます。ログインのレスポンスをSFSafariViewControllerからアプリに返すためには、カスタムURLスキームを定義する必要があります。
Xcodeで、プロジェクトの Info タブをクリックし、URL Types を選択します。
新しいURLタイプを追加し、URLスキームと識別子を com.your-company.your-app.virtusize に設定してください。
AppDelegate の application(_:open:options) メソッドを実装してください:
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
NotificationCenter.default.post(
name: Notification.Name("VirtusizeFlutterHandleURL"),
object: url
)
return super.application(app, open: url, options: options)
}❗重要
- URLタイプには、アプリのバンドルIDを含め、
.virtusizeで終わる必要があります。 - 複数のアプリアイデンティティ(ターゲット)がある場合は、それぞれにURLタイプを追加してください。
SDKをセットアップした後、Virtusizeウィジェットを追加して、顧客が理想的なサイズを見つけられるようにします。
Virtusize SDKはユーザーが使用するために2つの主要なUIコンポーネントを提供します。:
VirtusizeButtonはこのSDKの中でもっとシンプルなUIのボタンです。ユーザーが正しいサイズを見つけられるように、ウェブビューでアプリケーションを開きます。
SDKのVirtusizeボタンには2つのデフォルトスタイルがあります。
| Teal Theme | Black Theme |
|---|---|
![]() |
![]() |
もしご希望であれば、ボタンのスタイルもカスタマイズすることができます。
-
VirtusizeButton.vsStyle({required VirtusizeClientProduct product, VirtusizeStyle style = VirtusizeStyle.black, Widget child})
デフォルトのVirtusizeスタイルで、
VirtusizeSDK.instance.loadVirtusize関数に渡したものと同じVirtusizeClientProductオブジェクトを使用してVirtusizeButtonウィジェットを作成します。// A `VirtusizeButton` widget with default `black` style VirtusizeButton.vsStyle(product: _product) // A `VirtusizeButton` widget with `teal` style and a custom `Text` widget VirtusizeButton.vsStyle( product: _product, style: VirtusizeStyle.teal, child: Text("Custom Text") )
または、カスタムボタンウィジェットを使用してVirtusizeButtonウィジェットを作成します。
-
VirtusizeButton({required VirtusizeClientProduct product, required Widget child})
// A `VirtusizeButton` widget with a custom `ElevatedButton` widget VirtusizeButton( product: _product, child: ElevatedButton( child: Text('Custom Button'), // Implement the `onPressed` callback with the `VirtusizePlugin.instance.openVirtusizeWebView` function if you have customized the button onPressed: () => VirtusizeSDK.instance.openVirtusizeWebView(_product)) ) )
Virtusize InPageは、サービスのスタートボタンのように動作するボタンです。こちらは、ユーザーが一目で適切なサイズがわかるフィッティングガイドとしても機能します。
Virtusize SDKには2種類のInPageがあります。
| InPage Standard | InPage Mini |
|---|---|
![]() |
![]() |
- InPageをVirtusizeボタンと一緒に実装することはできません。オンラインショップのInPageまたはVirtusizeボタンを選択してください。
- InPage Miniは、常にInPageStandardと組み合わせて使用する必要があります。
-
VirtusizeInPageStandard.vsStyle({required VirtusizeClientProduct product, VirtusizeStyle style = VirtusizeStyle.black, double horizontalMargin = 16})
VirtusizeSDK.instance.loadVirtusize関数に渡した同じVirtusizeClientProductオブジェクトを使用して、デフォルトのVirtusizeスタイルとhorizontal marginを変更する機能を備えたVirtusizeInPageStandardウィジェットを作成します。// A `VirtusizeInPageStandard` widget with default `black` style and a default horizontal margin of `16` VirtusizeInPageStandard.vsStyle(product: _product) // A `VirtusizeInPageStandard` widget with `teal` style and a horizontal margin of `32` VirtusizeInPageStandard.vsStyle( product: _product, style: VirtusizeStyle.teal, horizontalMargin: 32 )
または、ボタンのbackground colorとhorizontal marginを変更する機能を備えたVirtusizeInPageStandardウィジェットを作成します。
-
VirtusizeInPageStandard({required VirtusizeClientProduct product, Color buttonBackgroundColor = VSColors.vsGray900, double horizontalMargin = 16})
// A `VirtusizeInPageStandard` widget with a default `VSColors.vsGray900` button background color and a default horizontal margin of `16` VirtusizeInPageStandard(product: _product) // A `VirtusizeInPageStandard` widget with a `Colors.amber` button background color and a horizontal margin of `32` VirtusizeInPageStandard( product: _product, buttonBackgroundColor: Colors.amber, horizontalMargin: 32 )
-
デフォルトのデザインバリエーションは2つあります。
Teal Theme Black Theme 

-
考えられるレイアウトは次のとおりです。
1 thumbnail + 2 lines of message 2 thumbnails + 2 lines of message 

1 thumbnail + 1 line of message 2 animated thumbnails + 2 lines of message 

-
- サイズテーブルの近く
- サイズ情報内
-
- できる事
- WebAIMコントラストテストを合格した色に限り、CTAボタンの背景色を変更できます。
- アプリケーションの幅と一致するようInPageの幅を変更できます。
- できない事
- 形やスペーシングなどのインターフェイスコンポーネントの変更。
- フォントの変更。
- CTAボタンの形の変更。
- メッセージの変更。
- インページボックス影デザインの変更または非表示切り替え。
- VIRTUSIZEロゴとプライバシーポリシーのテキストリンクを含むフッター非表示切り替え。
- できる事
これは、アプリケーションに配置できるInPageのミニバージョンです。目立たないデザインは、顧客が商品の画像やサイズ表を閲覧しているレイアウトに適しています。
-
VirtusizeInPageMini.vsStyle({required VirtusizeClientProduct product, VirtusizeStyle style = VirtusizeStyle.black, double horizontalMargin = 16})
VirtusizeSDK.instance.loadVirtusize関数に渡したものと同じVirtusizeClientProductオブジェクトを使用して、デフォルトのVirtusizeスタイルとhorizontal marginを変更する機能を備えたVirtusizeInPageMiniウィジェットを作成します。// A `VirtusizeInPageMini` widget with default `black` style and a default horizontal margin of `16` VirtusizeInPageMini.vsStyle(product: _product) // A `VirtusizeInPageMini` widget with `teal` style and a default horizontal margin of `16` VirtusizeInPageMini.vsStyle( product: _product, style: VirtusizeStyle.teal )
または、background colorとhorizontal marginを変更する機能を備えたVirtusizeInPageMiniウィジェットを作成します。
-
VirtusizeInPageMini({required VirtusizeClientProduct product, Color backgroundColor = VSColors.vsGray900, double horizontalMargin = 16})
// A `VirtusizeInPageMini` widget with a default `VSColors.vsGray900` background color and a default horizontal margin of `16` VirtusizeInPageMini(product: _product) // A `VirtusizeInPageMini` widget with a `Colors.blue` background color and a default horizontal margin of `16` VirtusizeInPageMini( product: _product, backgroundColor: Colors.blue )
-
デフォルトのデザインバリエーションは2つあります。
Teal Theme Black Theme 

-
Underneath the product image Underneath or near the size table 

-
- 日本語
- Noto Sans CJK JP
- (Message) Text size: 12
- (Button) Text size: 10
- 韓国語
- Noto Sans CJK KR
- (Message) Text size: 12
- (Button) Text size: 10
- 英語
- Roboto for Android and San Francisco for iOS
- (Message) Text size: 14
- (Button) Text size: 12
- 日本語
-
- できる事
- WebAIMコントラストテストを合格した色に限り、CTAボタンの背景色を変更できます。
- できない事
- フォントの変更。
- CTAボタンの形変更。
- メッセージの変更。
- できる事
注文APIを使用すると、Virtusizeは、購入履歴の一部として最近購入したアイテムを顧客に表示し、それらのアイテムを使用して、購入したい新しいアイテムと比較することができます。
Virtusizeに注文を送信する前に、ユーザーIDが設定されていることを確認してください。以下にてユーザーIDを設定できます:
VirtusizeSDK.instance.setVirtusizeParamsを使用してVirtusizeパラメーターを設定している間
または
VirtusizeSDK.instance.sendOrder関数を呼び出す前の任意の場所
// Use the `VirtusizeSDK.instance.setVirtusizeParams` to set the user ID
VirtusizeSDK.instance.setVirtusizeParams(
apiKey: '15cc36e1d7dad62b8e11722ce1a245cb6c5e6692',
userId: '123',
...
);
// Use the `VirtusizeSDK.instance.setUserId` before sending an order
VirtusizeSDK.instance.setUserId("123456");VirtusizeOrderオブジェクトはVirtusizeSDK.instance.sendOrder関数に渡され、次の属性があります。
注:*は引数が必要であることを意味します。
VirtusizeOrder
| データ形式 | タイプ | 例 | 説明 |
|---|---|---|---|
| externalOrderId* | String | "20200601586" | 御社にてご用意いただいたオーダーID |
| items* | List<VirtusizeOrderItem> |
See the table below | オーダー商品リスト |
VirtusizeOrderItem
| データ形式 | タイプ | 例 | 説明 |
|---|---|---|---|
| externalProductId* | String | "A001" | 各商品ユニークIDをご利用ください |
| size* | String | "S", "M", etc. | サイズ名称 |
| sizeAlias | String | "Small", "Large", etc. | サイズ名が商品ページのものと同一でない場合は、サイズのエイリアスが追加されます |
| variantId | String | "A001_SIZES_RED" | バリアントIDは、製品のSKU、色、またはサイズに設定されます(複数のオプションがある場合) |
| imageURL* | String | "http://images.example.com/coat.jpg" | 商品画像URL |
| color | String | "RED", "R', etc. | 色 |
| gender | String | "W", "Women", etc. | 性別 |
| unitPrice* | double | 5100.00 | 最大12桁と小数点以下2桁の2桁の製品価格(12、2) |
| currency* | String | "JPY", "KRW", "USD", etc. | 通貨コード |
| quantity* | int | 1 | 購入したアイテム数。共有がなかった場合、デフォルトで1になります。 |
| url | String | "http://example.com/products/A001" | 商品ページのURL。これがユーザーがアクセスできるURLであることを確認してください。 |
サンプル例
VirtusizeOrder order = VirtusizeOrder(
externalOrderId: "20200601586",
items: [
VirtusizeOrderItem(
externalProductId: "A001",
size: "L",
sizeAlias: "Large",
variantId: "A001_SIZEL_RED",
imageURL: "http://images.example.com/products/A001/red/image1xl.jpg",
color: "Red",
gender: "W",
unitPrice: 5100.00,
currency: "JPY",
quantity: 1,
url: "http://example.com/products/A001"
)
]
);ユーザーが注文するときに、VirtusizeSDK.instance.sendOrder関数を呼び出します。
onSuccessおよびonErrorコールバックはオプションです。
VirtusizeSDK.instance.sendOrder(
order: order,
// The `onSuccess` callback is optional and is called when the app has successfully sent the order
onSuccess: (sentOrder) {
print("Successfully sent the order $sentOrder");
},
// The `onError` callback is optional and gets called when an error occurs while the app is sending the order
onError: (error) {
print(error);
}
);https://github.com/virtusize/virtusize_flutter_sdk/tree/main/example
Copyright (c) 2021-present Virtusize CO LTD (https://www.virtusize.jp)





