【问题标题】:Change push notification text in android在android中更改推送通知文本
【发布时间】:2020-12-30 19:01:36
【问题描述】:

我创建了一个 xamarin 应用程序,我想在推送通知文本显示给用户之前对其进行编辑。

我正在使用通知扩展服务和 OneSingal 库来获取通知。

using System;
using Android.App;
using Android.Content;
using Android.Preferences;
using Android.Support.V4.App;
using Com.OneSignal.Android;
using MyApp.Shared.Utility;

namespace MyApp.Droid
{
[Service(Permission = "android.permission.BIND_JOB_SERVICE")]
[IntentFilter(new String[] { "com.onesignal.NotificationExtender" })]
public class CustomNotificationExtenderService : NotificationExtenderService
{
    private OSNotificationReceivedResult _result;
    private NotificationManager notifyManager = Application.Context.GetSystemService(Context.NotificationService) as NotificationManager;
    private NotificationCompat.Builder builder = new NotificationCompat.Builder(Application.Context, "1");
    protected override void OnHandleIntent(Intent intent){ }
    protected override bool OnNotificationProcessing(OSNotificationReceivedResult p0)
    {
        _result = p0;
        var body = "New Encrypted Message";

        NotificationCompat.Builder builder = new NotificationCompat.Builder(Application.Context, "1");
        
        builder.SetSmallIcon(Resource.Drawable.Logo);
        builder.SetStyle(new NotificationCompat.BigTextStyle().BigText(body));
        builder.SetContentTitle("New Message");
        builder.SetContentText(body);
        // Build the notification and display it
        notifyManager.Notify(1, builder.Build());
        return false;
    }
}
}

请注意,在上面的示例代码中,我省略了创建通知横幅中的文本的逻辑。我期待看到带有文本“新加密消息”的推送通知。但它显示了从服务器发送的实际消息。

感谢您的帮助

【问题讨论】:

  • 这条线不工作吗? builder.SetContentTitle("新消息");你可以删除 builder.SetContentTitle("New Message");
  • 它不起作用。它仍然显示来自服务器的消息

标签: android xamarin push-notification onesignal


【解决方案1】:

如果需要显示自定义消息,您可以尝试覆盖 NotificationCompat.Builder 并将其返回到 OverrideSettings。

示例代码如下:

import android.support.v4.app.NotificationCompat;
import com.onesignal.OSNotificationDisplayedResult;
import com.onesignal.OSNotificationPayload;
import com.onesignal.NotificationExtenderService;
import com.onesignal.OSNotificationReceivedResult;
import java.math.BigInteger;
import android.util.Log;

public class NotificationExtenderExample extends NotificationExtenderService {
   @Override
   protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {
      OverrideSettings overrideSettings = new OverrideSettings();
      overrideSettings.extender = new NotificationCompat.Extender() {
         @Override
         public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
            //Force remove push from Notification Center after 30 seconds
            builder.setTimeoutAfter(30000);
            // Sets the icon accent color notification color to Green on Android 5.0+ devices.
            builder.setColor(new BigInteger("FF00FF00", 16).intValue());
            builder.setContentTitle("New Message");
            builder.setContentText("New Encrypted Message");
            return builder;
         }
      };

      OSNotificationDisplayedResult displayedResult = displayNotification(overrideSettings);
      Log.d("OneSignalExample", "Notification displayed with id: " + displayedResult.androidNotificationId);

      // Return true to stop the notification from displaying.
      return false;
   }
}

更多信息可以参考OneSignal Service Extensions document。

【讨论】:

  • 这不起作用。我已经和一位信号工程师谈过了。行 overridesettings.extender 抛出异常
  • @LibinJoseph Okey,明白了。如果其他解决方案稍后会在这里更新。
【解决方案2】:

每个通知都有两种方式。 1是应用程序在前台,其他是应用程序在后台。如果应用在后台,则通知由 Google 或 iOS 自行处理。

如果您的代码没有执行,则意味着您正在检查后台通知。

如果您希望您的代码必须在后台或前台一直执行,那么您应该使用静默推送通知。

对于推送通知,您无需执行任何操作。它是后端代码。在后端,他们必须将有效负载发送为'data' => $data 而不是'notification' => $data,对于ios 1 额外需要添加的是'content-available' => '1'

如需更多参考,您可以查看this link 用于 php 后端。其他后端服务器的语法可能不同。

【讨论】:

  • 我写的代码是用于通知服务的,意思是在后台处理它。与服务器端无关,通知服务扩展在ios中一切正常
  • 你能检查一下它是不是在后台工作还是在前台工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 2016-09-28
  • 1970-01-01
相关资源
最近更新 更多