我已经设置了远程通知并向有效负载添加了一些自定义键,如果用户点击通知并想要阅读有关该主题的更多信息,它们将提供在主页上推送特定详细信息 ViewController 的选项。
例如:linkType: "services"
和 linkPost: "main"
当应用程序进入前台时,会告诉我的应用程序推送主服务页面。
我可以成功访问变量中的键和值topicValue
, linkType
, 和 linkPost
但是当用户点击通知时,我无法调试代码所采用的路径,因此我知道何时何地推送正确的 ViewController。我正在使用 Xamarin.Essentials 包,所以我可以 Get
和 Set
这些键值对。我可以在整个应用程序的任何地方访问它们。
public class MyNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
{
if (response.IsDefaultAction)
{
var userInfo = response.Notification.Request.Content.UserInfo;
string topicValue = userInfo.ObjectForKey(new NSString("topic")).ToString();
string linkType = userInfo.ObjectForKey(new NSString("linktype")).ToString();
string linkPost = userInfo.ObjectForKey(new NSString("linkpage")).ToString();
Preferences.Set("linkType", linkType);
Preferences.Set("linkPost", linkPost);
我最初尝试使用
launchOptions
FinishedLaunching
中的参数AppDelegate 中的方法,但是当我设置断点时,当我点击远程通知时它们似乎没有命中。在 Xamarin.iOS 中完成此任务的任何帮助将不胜感激。
最佳答案
两件事(后台状态或非事件状态)
DidFinishLaunching
对于这种情况,您应该设置来自通知的 key 。您将从launchOptions 中获得该 key 。比较
viewWillAppear
中的那个键的 HomeViewController
并把 RedirectScreen
如果键匹配的代码。例如:-
linkType: "services"
首先,您应该获取
topMostViewController
然后使用此 Controller 重定向到任何屏幕。 例如:- 获取
topMostViewController
public static UIViewController GetTopViewController()
{
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
vc = vc.PresentedViewController;
if (vc is UINavigationController navController)
vc = navController.ViewControllers.Last();
return vc;
}
关于ios - 在 Xamarin iOS 中的远程通知 'Default User Action' 上推送 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774802/