我已经创建了一个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;
}
}
}
请注意,在上面的示例代码中,我省略了创建通知横幅中文本的逻辑。我期望看到带有文本“ New Encrypted Message”的推送通知。但是它显示了从服务器发送的实际消息。
感谢您的帮助
答案 0 :(得分:0)
如果需要显示自定义消息,您可以尝试覆盖 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;
}
}
答案 1 :(得分:0)
每个通知都有两种方式。 1是应用程序在前台,其他是应用程序在后台。如果应用程序在后台运行,则通知将由Google或iOS自行处理。
如果您的代码未执行,则意味着您正在检查后台通知。
如果您希望代码必须以后台或前台方式执行,而不是使用静默推送通知。
对于推送通知,您无需执行任何操作。这是后端代码。在后端,他们必须以'data' => $data
而不是'notification' => $data
的形式发送有效载荷,而对于ios 1,需要添加的额外内容是'content-available' => '1'
有关更多参考,您可以检查this link,它适用于php后端。其他后端服务器的语法可能有所不同。