gpt4 book ai didi

xamarin.ios - 当应用程序在 Xamarin iOS 中处于后台时不显示本地通知

转载 作者:行者123 更新时间:2023-12-05 06:14:52 25 4
gpt4 key购买 nike

我已经在我的 Xamarin.IOS 应用程序中实现了聊天功能,因为无法从服务器端发送远程通知,所以我使用本地通知来提醒用户有新的传入消息。在模拟器中一切正常,我可以看到通知显示在前台和后台模式下。

但是当我在设备上运行该应用程序时,通知仅在前台模式下工作。当应用程序在后台时,不会显示通知。

调查此问题后,我发现当应用程序在 Debug模式下运行时它们工作正常(即从 VisualStudio 启动并且电缆仍然连接)。但是一旦我断开电缆,它们就不会再显示了。

我找到了一些帖子 https://stackoverflow.com/a/35029847这表明此行可以解决问题,但由于处理程序不能再为 null,因此它不起作用。application.BeginBackgroundTask("showNotification", expirationHandler: null);

所以我在我的应用程序委托(delegate)中实现了以下代码,但它仍然无法正常工作

nint taskID = 111;
taskID = application.BeginBackgroundTask("showNotification", expirationHandler: ()=> {
UIApplication.SharedApplication.EndBackgroundTask(taskID);
});

我还尝试了后台获取并在 AppDelegate 的行下方添加,但它没有用。 application.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);

安排本地通知代码

var content = new UNMutableNotificationContent();
content.Body = body;
content.Sound = UNNotificationSound.Default;
content.UserInfo = dict;
content.Badge = IOSAppConstant.LocalNotificationCount + 1;

var request = UNNotificationRequest.FromIdentifier(chatID, content, null);

// schedule it
UNUserNotificationCenter.Current.AddNotificationRequest(request, (error) =>
{
if (error != null)
{
Console.WriteLine($"Error: {error.LocalizedDescription ?? ""}");
}
else
{
Console.WriteLine("Scheduled...");
}
});

//注册通知

UNUserNotificationCenter.Current.RequestAuthorization
(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound,
(granted, error) =>
{
if (granted)
InvokeOnMainThread(UIApplication.SharedApplication.RegisterForRemoteNotifications);
});

//分配委托(delegate)

this._userNotificationCenterDelegate = new UserNotificationCenterDelegate();
UNUserNotificationCenter.Current.Delegate = this._userNotificationCenterDelegate;

//通知代理

public class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
public override void WillPresentNotification(UNUserNotificationCenter center,
UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
completionHandler(UNNotificationPresentationOptions.Alert);
}

public override void DidReceiveNotificationResponse(UNUserNotificationCenter center,
UNNotificationResponse response, Action completionHandler)
{
completionHandler();
}
}

我也试过在我的聊天 Controller 上从 BeginBackgroundTask 调用调度通知函数,但它不起作用

问题类似于 Local Push notification not working in Xamarin iOS但没有可用的解决方案。

最佳答案

你提到你不能使用这个问题的答案https://stackoverflow.com/a/3502984因为您不能为 BeginBackgroundTask 的 expirationHandler 提供 null。要解决这个问题,您可以提供任意操作。结果是当发布的应用程序在后台时,本地通知应该工作

public void NotifAction()
{
// This exists because expirationHandler can't be null
}

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{

global::Xamarin.Forms.Forms.Init();
LoadApplication(new App());
UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);

Action testActon = NotifAction;

UIApplication.SharedApplication.BeginBackgroundTask("showNotification", testActon);
return base.FinishedLaunching(app, options);
}

关于xamarin.ios - 当应用程序在 Xamarin iOS 中处于后台时不显示本地通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62696063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com