0

我正在接收来自 onesignal 的通知,其中包含从服务发送的 actionButtons。我该如何处理这些按钮并处理它们的事件?

    protected boolean onNotificationProcessing(final OSNotificationReceivedResult receivedResult) {
            OverrideSettings overrideSettings = new OverrideSettings();

            // here I am getting the data sent thtough oneSignal
            final JSONObject additionalData = receivedResult.payload.additionalData;

            // here I am getting my buttons
            final List<OSNotificationPayload.ActionButton> actionButtons = receivedResult.payload.actionButtons;

            overrideSettings.extender = new NotificationCompat.Extender() {
            @Override
            public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
            try { 

            // Here I am creating my own button and adding it to the notification

            Intent intent =  new Intent(Intent.ACTION_DIAL);
            intent.setData(Uri.parse("tel:" + phoneNumber));
            PendingIntent pendingIntentCall = PendingIntent.getActivity(MyService.this, 12345, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            builder.addAction(R.drawable.phone_notif,getString(R.string.call),pendingIntentCall);
            } catch (Exception e) {
            }
          return builder;
         }
       };
     return true
  }

如何处理从一个信号接收到的 actionButtons 事件?它们出现了,但是当我单击它们时,它们的行为就像我单击通知一样...

4

1 回答 1

0

OneSignal 的 Android SDK 为收到的通知提供处理程序。你应该为你的按钮设置 ID 来区分它们。您还可以将其他数据(例如要访问的 url 或其他一些元数据)作为data键下的哈希发送。从他们的文档中

class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
  // This fires when a notification is opened by tapping on it.
  @Override
  public void notificationOpened(OSNotificationOpenResult result) {
    OSNotificationAction.ActionType actionType = result.action.type;
    JSONObject data = result.notification.payload.additionalData;
    String customKey;

    if (data != null) {
      customKey = data.optString("customkey", null);
      if (customKey != null)
        Log.i("OneSignalExample", "customkey set with value: " + customKey);
    }

    if (actionType == OSNotificationAction.ActionType.ActionTaken)
      Log.i("OneSignalExample", "Button pressed with id: " + result.action.actionID);

    // The following can be used to open an Activity of your choice.
    // Replace - getApplicationContext() - with any Android Context.
    // Intent intent = new Intent(getApplicationContext(), YourActivity.class);
    // intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
    // startActivity(intent);

     // Add the following to your AndroidManifest.xml to prevent the launching of your main Activity
     //   if you are calling startActivity above.
     /* 
        <application ...>
          <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />
        </application>
     /*
  }
}
于 2017-02-25T15:32:03.280 回答