获取 OneSignal 通知计数
Get OneSignal notification count
我需要获取 OneSignal 推送通知并在徽章图标上显示尚未看到的通知数量。我不知道当推送通知到达时我如何增加徽章的数量以及当他被可视化时我如何删除。
我使用 实现 'com.nex3z:notification-badge:1.0.2' 来展示我的徽章:
final NotificationBadge badge = findViewById(R.id.badge);
badge.setNumber(NUMBER_NOTIFICATION);
在另一种情况下,我使用此 class 对通知执行点击操作:
public class NotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
private AppCompatActivity application;
Pessoa pessoa;
public NotificationOpenedHandler(AppCompatActivity application){
this.application = application;
}
@Override
public void notificationOpened(OSNotificationOpenResult result) {
pessoa = SharedPrefs.GetPessoa(application);
//Pegar a ação de click do usuário na notificação
OSNotificationAction.ActionType actionType = result.action.type;
//Pegar conteudo adicional do push enviado
JSONObject data = result.notification.payload.additionalData;
//Verifica se o USUÁRIO clicou nos botões da notificação enviada
if (actionType == OSNotificationAction.ActionType.ActionTaken || actionType == OSNotificationAction.ActionType.Opened) {
Log.i("OneSignalExample", "Button pressed with id: " + result.action.actionID);
//É feita a verificação se existe additionalData naquela notificação
if (data != null && data.length() != 0) {
if (actionType.equals(OSNotificationAction.ActionType.ActionTaken)) {
//Verifica se o botao da notificação clicado foi o com o nome "VER PUBLICAÇÃO"
if (result.action.actionID.equals("VIEW_IDENTIFIER")) {
DataOneSignal dataMap = new DataOneSignal();
Type type = new TypeToken<DataOneSignal>() {
}.getType();
dataMap = (DataOneSignal) new GsonBuilder().create().fromJson(String.valueOf(data), type);
switch (dataMap.getTipo()) {
//Caso a notificação seja para o PERFIL do USUÁRIO
case 0:
Intent intentCase0 = new Intent(application, PerfilActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intentCase0.putExtra("IdentificadorTarget", dataMap.getConteudo());
intentCase0.putExtra("IdentificadorSelf", this.pessoa.getIdentificador());
application.startActivity(intentCase0);
break;
//Caso a solicitação seja para o CHAT
case 1:
Intent intentCase1 = new Intent(application, Chat_Activity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intentCase1.putExtra("IdentificadorTarget", dataMap.getConteudo());
intentCase1.putExtra("IdentificadorSelf", this.pessoa.getIdentificador());
application.startActivity(intentCase1);
break;
//Recusado (provavelmente não vai usar)
case 2:
Intent intentCase2 = new Intent(application, ContatosActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
application.startActivity(intentCase2);
break;
//Caso a notificação seja para o FÓRUM
case 3:
Intent intentCase3 = new Intent(application, DetalheTopico_Activity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intentCase3.putExtra("TopicoId", dataMap.getConteudo());
application.startActivity(intentCase3);
break;
default:
Toast.makeText(getApplicationContext(), "Não foi possível encontrar a sessão.", Toast.LENGTH_LONG).show();
break;
}
}
}
}
} else {
final CustomDialogClass cdd = new CustomDialogClass(application);
cdd.setTitulo_txt("Fechar o aplicativo?");
cdd.setPositiveButton("Sim", new View.OnClickListener() {
@Override
public void onClick(View v) {
cdd.dismiss();
}
});
cdd.setNegativeButton("Não", new View.OnClickListener() {
@Override
public void onClick(View view) {
cdd.dismiss();
}
});
cdd.show();
}
}
}
徽章计数由 OneSignal SDK 自动为您管理。但是,如果您想自己管理它们,请随时查看我们的 guide.
编辑: 显示在应用内,您可以从 players endpoint
检索信息
我需要获取 OneSignal 推送通知并在徽章图标上显示尚未看到的通知数量。我不知道当推送通知到达时我如何增加徽章的数量以及当他被可视化时我如何删除。
我使用 实现 'com.nex3z:notification-badge:1.0.2' 来展示我的徽章:
final NotificationBadge badge = findViewById(R.id.badge);
badge.setNumber(NUMBER_NOTIFICATION);
在另一种情况下,我使用此 class 对通知执行点击操作:
public class NotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
private AppCompatActivity application;
Pessoa pessoa;
public NotificationOpenedHandler(AppCompatActivity application){
this.application = application;
}
@Override
public void notificationOpened(OSNotificationOpenResult result) {
pessoa = SharedPrefs.GetPessoa(application);
//Pegar a ação de click do usuário na notificação
OSNotificationAction.ActionType actionType = result.action.type;
//Pegar conteudo adicional do push enviado
JSONObject data = result.notification.payload.additionalData;
//Verifica se o USUÁRIO clicou nos botões da notificação enviada
if (actionType == OSNotificationAction.ActionType.ActionTaken || actionType == OSNotificationAction.ActionType.Opened) {
Log.i("OneSignalExample", "Button pressed with id: " + result.action.actionID);
//É feita a verificação se existe additionalData naquela notificação
if (data != null && data.length() != 0) {
if (actionType.equals(OSNotificationAction.ActionType.ActionTaken)) {
//Verifica se o botao da notificação clicado foi o com o nome "VER PUBLICAÇÃO"
if (result.action.actionID.equals("VIEW_IDENTIFIER")) {
DataOneSignal dataMap = new DataOneSignal();
Type type = new TypeToken<DataOneSignal>() {
}.getType();
dataMap = (DataOneSignal) new GsonBuilder().create().fromJson(String.valueOf(data), type);
switch (dataMap.getTipo()) {
//Caso a notificação seja para o PERFIL do USUÁRIO
case 0:
Intent intentCase0 = new Intent(application, PerfilActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intentCase0.putExtra("IdentificadorTarget", dataMap.getConteudo());
intentCase0.putExtra("IdentificadorSelf", this.pessoa.getIdentificador());
application.startActivity(intentCase0);
break;
//Caso a solicitação seja para o CHAT
case 1:
Intent intentCase1 = new Intent(application, Chat_Activity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intentCase1.putExtra("IdentificadorTarget", dataMap.getConteudo());
intentCase1.putExtra("IdentificadorSelf", this.pessoa.getIdentificador());
application.startActivity(intentCase1);
break;
//Recusado (provavelmente não vai usar)
case 2:
Intent intentCase2 = new Intent(application, ContatosActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
application.startActivity(intentCase2);
break;
//Caso a notificação seja para o FÓRUM
case 3:
Intent intentCase3 = new Intent(application, DetalheTopico_Activity.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intentCase3.putExtra("TopicoId", dataMap.getConteudo());
application.startActivity(intentCase3);
break;
default:
Toast.makeText(getApplicationContext(), "Não foi possível encontrar a sessão.", Toast.LENGTH_LONG).show();
break;
}
}
}
}
} else {
final CustomDialogClass cdd = new CustomDialogClass(application);
cdd.setTitulo_txt("Fechar o aplicativo?");
cdd.setPositiveButton("Sim", new View.OnClickListener() {
@Override
public void onClick(View v) {
cdd.dismiss();
}
});
cdd.setNegativeButton("Não", new View.OnClickListener() {
@Override
public void onClick(View view) {
cdd.dismiss();
}
});
cdd.show();
}
}
}
徽章计数由 OneSignal SDK 自动为您管理。但是,如果您想自己管理它们,请随时查看我们的 guide.
编辑: 显示在应用内,您可以从 players endpoint
检索信息