How to Integrate
Quickstart from Dashboard
You should have your organization registered at the VGS Dashboard. Sandbox vault will be pre-created for you. You should use your to start collecting data. Follow integration guide below.
Integrate VGS Collect SDK into Your Android Project
To use the SDK in your project you just need to add the following line of dependency in your module build.gradle file and then rebuild project.
Follow our latest releases .
dependencies {
//...
implementation 'com.verygoodsecurity:vgscollect:<latest-version>'
//...
}
Include additional configurations
In case you have minifyEnabled enabled don't forget to add next line to your project R8 configuration.
//...
-keep public class com.google.android.material** { *; }
//...
Configure Your App
To initialize VGSCollect you have to set your vault id and Environment type. You can find more information at the following section.
import com.verygoodsecurity.vgscollect.core.Environment
import com.verygoodsecurity.vgscollect.core.VGSCollect
class MainActivity : AppCompatActivity() {
private lateinit var vgsForm:VGSCollect
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>)
}
override fun onDestroy() {
super.onDestroy()
}
}
import com.verygoodsecurity.vgscollect.core.Environment;
import com.verygoodsecurity.vgscollect.core.VGSCollect;\n
public class MainActivity extends Activity {
private VGSCollect vgsForm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vgsForm = new VGSCollect( this, "<VAULT_ID>", Environment.<SANDBOX>);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
Configuring UI Elements
Add input field to R.layout.activity_main
layout file:
You must set up
fieldName
to theVGSCardNumberEditText
in other way input field will be ignored by VGSCollect.
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<com.verygoodsecurity.vgscollect.widget.VGSTextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="true"
app:hint="Card number"
app:boxCornerRadius="4dp"
app:boxBackgroundModes="outline">
<com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText
android:id="@+id/cardNumberField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:fieldName="card_number"
app:numberDivider="-"
app:cardBrandIconGravity="end"/>
</com.verygoodsecurity.vgscollect.widget.VGSTextInputLayout>
<Button
android:id="@+id/submitBtn"
android:text="Submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Collecting Sensitive Data on Android
Once you have added the input field to your layout , find the object, attach it to VGSCollect
for the data to be sent securely:
import com.verygoodsecurity.vgscollect.core.Environment
import com.verygoodsecurity.vgscollect.core.VGSCollect
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText
class MainActivity : AppCompatActivity() {
private lateinit var vgsForm:VGSCollect
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>)
val submitBtn = findViewById<Button>(R.id.submitBtn)
val cardNumberField = findViewById<VGSCardNumberEditText>(R.id.cardNumberField)
vgsForm.bindView(cardNumberField)
}\n
override fun onDestroy() {
super.onDestroy()
}
}
import com.verygoodsecurity.vgscollect.core.Environment;
import com.verygoodsecurity.vgscollect.core.VGSCollect;
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText;
public class MainActivity extends Activity {
private VGSCollect vgsForm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vgsForm = new VGSCollect( this, "<VAULT_ID>", Environment.<SANDBOX>);
Button submitBtn = findViewById(R.id.submitBtn);
VGSCardNumberEditText myTextView = findViewById(R.id.cardNumberField);
vgsForm.bindView(myTextView);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
Submit Information
Call asyncSubmit
to execute and send data on VGS Server
Do not use
submit
on the UI thread as this will crash.
import com.verygoodsecurity.vgscollect.core.Environment
import com.verygoodsecurity.vgscollect.core.VGSCollect
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText
class MainActivity : AppCompatActivity() {
private lateinit var vgsForm:VGSCollect
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>)
val submitBtn = findViewById<Button>(R.id.submitBtn)
submitBtn?.setOnClickListener {
submitData()
}
val cardNumberField = findViewById<VGSCardNumberEditText>(R.id.cardNumberField)
vgsForm.bindView(cardNumberField)
}
private fun submitData() {
vgsForm.asyncSubmit("/post", HTTPMethod.POST)
}
override fun onDestroy() {
super.onDestroy()
}
}
import com.verygoodsecurity.vgscollect.core.Environment;
import com.verygoodsecurity.vgscollect.core.VGSCollect;
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText;
public class MainActivity extends Activity {
private VGSCollect vgsForm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>);
Button submitBtn = findViewById(R.id.submitBtn);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
submitData();
}
});
VGSCardNumberEditText myTextView = findViewById(R.id.cardNumberField);
vgsForm.bindView(myTextView);
}
private void submitData() {
vgsForm.asyncSubmit("/post", HTTPMethod.POST);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
End Session
Finish work with VGSCollect by calling onDestroy inside android onDestroy
callback:
import com.verygoodsecurity.vgscollect.core.Environment
import com.verygoodsecurity.vgscollect.core.VGSCollect
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText
class MainActivity : AppCompatActivity() {
private lateinit var vgsForm:VGSCollect
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>)
val submitBtn = findViewById<Button>(R.id.submitBtn)
submitBtn?.setOnClickListener {
submitData()
}
val cardNumberField = findViewById<VGSCardNumberEditText>(R.id.cardNumberField)
vgsForm.bindView(cardNumberField)
}
private fun submitData() {
vgsForm.asyncSubmit("/post", HTTPMethod.POST)
}
override fun onDestroy() {
vgsForm.onDestroy()
super.onDestroy()
}
}
import com.verygoodsecurity.vgscollect.core.Environment;
import com.verygoodsecurity.vgscollect.core.VGSCollect;
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText;\n
public class MainActivity extends Activity {
private VGSCollect vgsForm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);\n
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>);\n
Button submitBtn = findViewById(R.id.submitBtn);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
submitData();
}
});
VGSCardNumberEditText myTextView = findViewById(R.id.cardNumberField);
vgsForm.bindView(myTextView);
}
private void submitData() {
vgsForm.asyncSubmit("/post", HTTPMethod.POST);
}
@Override
protected void onDestroy() {
vgsForm.onDestroy();
super.onDestroy();
}
}
Handling Responses
To read response or track different errors you need to implement VgsCollectResponseListener
:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)\n
vgsForm = VGSCollect(this, "<VAULT_ID>", Environment.<SANDBOX>)\n
val submitBtn = findViewById<Button>(R.id.submitBtn)
submitBtn?.setOnClickListener {
submitData()
}
val cardNumberField = findViewById<VGSCardNumberEditText>(R.id.cardNumberField)
vgsForm.bindView(cardNumberField)
vgsForm.addOnResponseListeners(object : VgsCollectResponseListener {
override fun onResponse(response: VGSResponse?) {
val code = response.code
val body = response.body
}
})
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vgsForm = new VGSCollect( this, "<VAULT_ID>", Environment.<SANDBOX>);
Button submitBtn = findViewById(R.id.submitBtn);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
submitData();
}
});
VGSCardNumberEditText myTextView = findViewById(R.id.cardNumberField);
vgsForm.bindView(myTextView);
vgsForm.addOnResponseListeners(new VgsCollectResponseListener() {
@Override
public void onResponse(VGSResponse response) {
int code = response.getCode();
String body = response.getBody();
}
});
}
More Information
In addition, there is some documentation you might want to read next about tracking changes or sending additional information.
See also:
Last updated