Métodos que buscam no SDK o estilo da aplicação da adquirente previamente ajustados no portal PayStore.¶
Os métodos que seguem são responsáveis por obter a identidade visual da aplicação por meio da logo da interface grafica, logo do comprovante e o tema da aplicação, sendo assim utilizados para a estilização da aplicação. Para informações mais detalhadas sobre a personalização visual da aplicação clique aqui.
Métodos¶
| Assinatura | Descrição |
|---|---|
void getLogo(PaymentCallback paymentCallback) |
Método utilizado para obter a imagem de logo da aplicação. |
void getReceiptLogo(PaymentCallback paymentCallback) |
Método utilizado para obter a imagem de logo do comprovante da aplicação. |
void getTheme(PaymentCallback<ColorsSdk> paymentCallback) |
Método utilizado para obter as cores do tema da aplicação. |
Parâmetros¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
paymentCallback |
PaymentCallback |
Sim | Callback pardrão utilizado para as demais funções do PaymentClient que carrega a String com o resultado das operações. No caso dos métodos getLogo e getReceiptLogo a String retornada representa uma imagem com base 64. |
paymentCallback |
PaymentCallback<ColorsSdk> |
Sim | Callback parametrizada com ColorsSdk que carrega o objeto com o resultado da operação. |
Detalhes do parâmetro paymentCallback¶
O parâmetro paymentCallback é definido por a instância de um objeto PaymentClient.PaymentCallback que usa o tipo definido pelo seu retrono, ou seja, no caso dos métodos getLogo e getReceiptLogo que tem uma String retornada, a instância do paymentCallback deve ser PaymentClient.PaymentCallback<String>.
Para o método getTheme que tem como retorno um objeto ColorsSdk o seu paymentCallback deve ser instanciado como PaymentClient.PaymentCallback<ColorsSdk>.
É importante pontuar que para realizar a instância do paymentCallback, é necessário implementar os métodos onSuccess e onError devido ao PaymentClient.PaymentCallback ser uma interface.
O método onSuccess que deverá ser implementado carrega do resultado da operação em seu parâmetro, que deve ser do mesmo tipo do retono do método que se deseja chamar, ou seja, no caso do getLogo que tem o seu retorno como String o método onSuccess deve ser implementado com a assinatura do seu parâmetro sendo do tipo String. Para o método getTheme que tem o seu retorno como ColorsSdk o método onSuccess deve ser implementado com a assinatura do seu parâmetro sendo do tipo ColorsSdk. O onSuccess será executado sempre que a operação for bem sucedida.
No método onError a execução sempre ocorrerá quando houver falha ao executar a operação, a assinatura do seu método diferente do onSuccess não depende do tipo do retorno, sendo sempre ErrorData que contém os dados de erro da operação como os atributos.
| Nome | Tipo | Descrição |
|---|---|---|
ErrorData.paymentsResponseCode |
String |
Código de resposta para o erro ocorrido. Vide Códigos de Resposta |
ErrorData.responseMessage |
String |
Mensagem descritiva da causa do erro. |
Sintetizando os detalhes abordados em código temos:
PaymentClient paymentClient = new PaymentClient(); //Criando um objeto PaymentClient
paymentClient.bind(this.getApplicationContext()); //Realizando o bind
try{
paymentClient.getLogo(new PaymentClient.PaymentCallback<String>() {
// ^
// instanciando o parâmetro para trabalhar com o tipo do seu retorno (String).
@Override
public void onSuccess(String strImage) {
// ^
// Assinatura do método onSuccess com o parâmetro do tipo String.
// O parâmetro strImage armazena a imagem em base 64.
}
@Override
public void onError(ErrorData errorData) {
}
});
} catch (ClientException e) {}
try{
paymentClient.getTheme(new PaymentClient.PaymentCallback<ColorsSdk>() {
// ^
// instanciando o parâmetro para trabalhar com o tipo do seu retorno (ColorsSdk).
@Override
public void onSuccess(ColorsSdk theme) {
// ^
// Assinatura do método onSuccess com o parâmetro do tipo ColorsSdk.
// O parâmetro theme armazena o tema da aplicação.
}
@Override
public void onError(ErrorData errorData) {
}
});
} catch (ClientException e) {}
ColorsSdk¶
| Construtores |
|---|
ColorsSdk() |
ColorsSdk(String colorPrimary, String colorPrimaryDark, String colorAccent, String colorPrimaryLight) |
| getters | setters |
|---|---|
String getThemeName() |
void setThemeName(String themeName) |
String getColorPrimary() |
void setColorPrimary(String colorPrimary) |
String getColorPrimaryDark() |
void setColorPrimaryDark(String colorPrimaryDark) |
String getColorAccent() |
void setColorAccent(String colorAccent) |
String getColorPrimaryLight() |
void setColorPrimaryLight(String colorPrimaryLight) |
Exemplo prático¶
Activity¶
public class GetVisualActivity extends AppCompatActivity implements PaymentClient.PaymentCallback<ReversePayment> {
private PaymentClient paymentClient;
public static final String TAG = "TAG_DEMO";
private final int GET_LOGO = 0;
private final int GET_RECEIPT_LOGO = 1;
private final int GET_THEME = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_visual);
paymentClient = new PaymentClient();
paymentClient.bind(this.getApplicationContext());
Button btn_logo = findViewById(R.id.btn_logo);
btn_logo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doExecute(GET_LOGO);
}
});
Button btn_receipt = findViewById(R.id.btn_receipt_logo);
btn_receipt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doExecute(GET_RECEIPT_LOGO);
}
});
Button btn_theme = findViewById(R.id.btn_theme);
btn_theme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doExecute(GET_THEME);
}
});
}
@Override
public void onSuccess(ReversePayment reversePayment) {
}
@Override
public void onError(ErrorData errorData) {
}
@Override
protected void onDestroy() {
try {
paymentClient.unbind(this);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
super.onDestroy();
}
public void doExecute (int function) {
switch (function)
{
case GET_LOGO:
try{
paymentClient.getLogo(new PaymentClient.PaymentCallback<String>() {
@Override
public void onSuccess(String s) {
Toast.makeText(getApplicationContext(), "ok getLogo", Toast.LENGTH_SHORT).show();
ImageView imageReceiptLogo = findViewById(R.id.image_view_logo);
imageReceiptLogo.setImageBitmap(convertBase64ToBitMap(s));
}
@Override
public void onError(ErrorData errorData) {
Toast.makeText(getApplicationContext(), "erro getLogo", Toast.LENGTH_SHORT).show();
}
});
} catch (ClientException e) {
Log.e(TAG, "Error testCard", e);
}
break;
case GET_RECEIPT_LOGO:
try {
paymentClient.getReceiptLogo(new PaymentClient.PaymentCallback<String>() {
@Override
public void onSuccess(String s) {
Toast.makeText(getApplicationContext(), "ok getReceiptLogo", Toast.LENGTH_SHORT).show();
ImageView imageReceiptLogo = findViewById(R.id.image_view_receipt_logo);
imageReceiptLogo.setImageBitmap(convertBase64ToBitMap(s));
}
@Override
public void onError(ErrorData errorData) {
Toast.makeText(getApplicationContext(), "erro getReceiptLogo", Toast.LENGTH_SHORT).show();
}
});
}
catch (ClientException e) {
Log.e(TAG, "Error testCard", e);
}
break;
case GET_THEME:
try {
paymentClient.getTheme(new PaymentClient.PaymentCallback<ColorsSdk>() {
@Override
public void onSuccess(ColorsSdk colorsSdk) {
Toast.makeText(getApplicationContext(), "Theme ok", Toast.LENGTH_SHORT).show();
showTheme(colorsSdk);
}
@Override
public void onError(ErrorData errorData) {
Toast.makeText(getApplicationContext(), "Theme erro", Toast.LENGTH_SHORT).show();
}
});
} catch (ClientException e) {
e.printStackTrace();
}
break;
}
}
private void getLogo() throws ClientException {
paymentClient.getLogo(new PaymentClient.PaymentCallback<String>() {
@Override
public void onSuccess(String strImage) {
Toast.makeText(getApplicationContext(), "ok getLogo", Toast.LENGTH_SHORT).show();
ImageView imageReceiptLogo = findViewById(R.id.image_view_receipt_logo);
imageReceiptLogo.setImageBitmap(convertBase64ToBitMap(strImage));
}
@Override
public void onError(ErrorData errorData) {
Toast.makeText(getApplicationContext(), "erro getLogo", Toast.LENGTH_SHORT).show();
}
});
}
private void showTheme(ColorsSdk colorsSdk) {
View colorPrimary = findViewById(R.id.view_color_primary);
View colorPrimaryDark = findViewById(R.id.view_color_primary_dark);
View colorAccent = findViewById(R.id.view_color_accent);
View colorPrimarylight = findViewById(R.id.view_color_primary_light);
TextView themeName = findViewById(R.id.text_view_theme_name);
colorPrimary.setBackgroundColor(Color.parseColor(colorsSdk.getColorPrimary()));
colorPrimaryDark.setBackgroundColor(Color.parseColor(colorsSdk.getColorPrimaryDark()));
colorAccent.setBackgroundColor(Color.parseColor(colorsSdk.getColorAccent()));
colorPrimarylight.setBackgroundColor(Color.parseColor(colorsSdk.getColorPrimaryLight()));
themeName.setText(colorsSdk.getThemeName());
}
private Bitmap convertBase64ToBitMap(String base64)
{
Bitmap decodedByte = null;
if (!base64.isEmpty()) {
byte[] decodedString = Base64.decode(base64, Base64.DEFAULT);
decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
}
return decodedByte;
}
}
xml¶
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".GetVisualActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/btn_logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="getLogo"
tools:ignore="MissingConstraints"
/>
<ImageView
android:id="@+id/image_view_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_receipt_logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="getReceiptLogo"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="159dp"
tools:layout_editor_absoluteY="372dp" />
<ImageView
android:id="@+id/image_view_receipt_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_theme"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="getTheme" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_view_theme_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<View
android:id="@+id/view_color_primary"
android:layout_width="50dp"
android:layout_height="50dp" />
<View
android:id="@+id/view_color_primary_dark"
android:layout_width="50dp"
android:layout_height="50dp" />
<View
android:id="@+id/view_color_accent"
android:layout_width="50dp"
android:layout_height="50dp" />
<View
android:id="@+id/view_color_primary_light"
android:layout_width="50dp"
android:layout_height="50dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Resultado¶
Implementando o exemplo é possível obter o seguinte resultado: