当App在Xamarin.Forms的iOS中运行时未收到推送通知 [英] Not getting push notification when App is running in iOS for Xamarin.Forms

查看:105
本文介绍了当App在Xamarin.Forms的iOS中运行时未收到推送通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已实施UrbanAirship进行推送通知.当应用在后台关闭时,我会收到通知.但是当应用程序运行时,我没有收到通知.

I have implemented UrbanAirship for push notification. I get notification when app is closed of in background. But I am not getting notification when app is running.

我已附上我的代码.有人可以调查一下,让我知道我在这里想念什么吗?

I have attached my code. Can anybody please look into and let me know what I am missing here?

谢谢.

AppDelegates.cs

AppDelegates.cs

public override bool FinishedLaunching(UIApplication uiApplication, NSDictionary launchOptions)
{
    UAirship.TakeOff();

    Xamarin.Forms.Forms.Init();
    LoadApplication(new App());

    UIApplication.SharedApplication.StatusBarHidden = false;
    UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.LightContent, false);

    _networkManager = new NetworkManager();

    UAirship.Push.UserPushNotificationsEnabled = true; 
    string chanelid = UAirship.Push.ChannelID;

    return base.FinishedLaunching(uiApplication, launchOptions);
}

[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
public void DidReceiveNotificationResponse(UserNotifications.UNUserNotificationCenter center, UserNotifications.UNNotificationResponse response, Action completionHandler)
{
    var alert = new UIAlertView("Title1", "Message1", null, "Cancel", "OK");
    alert.Show();
    //TAPPED NOTIFICATION
}

//Or 

//Fire when background received notification is clicked
public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
    var alert = new UIAlertView("Title2", "Message2", null, "Cancel", "OK");
    alert.Show();
}

info.plist

info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleExecutable</key>
    <string></string>
    <key>CFBundleDisplayName</key>
    <string>MyProject</string>
    <key>CFBundleName</key>
    <string>MyProject</string>
    <key>CFBundleIdentifier</key>
    <string>com.xxxxxxxx.xxxxx</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>MinimumOSVersion</key>
    <string>8.0</string>
    <key>UIDeviceFamily</key>
    <array>
      <integer>1</integer>
      <integer>2</integer>
    </array>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
      <string>armv7</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationPortraitUpsideDown</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>XSAppIconAssets</key>
    <string>Assets.xcassets/AppIcons.appiconset</string>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        //some values
      </dict>
    </dict>
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-api</string>
      <string>fbauth2</string>
      <string>fbshareextension</string>
    </array>
    <key>UIStatusBarHidden</key>
    <true/>
    <key>UIMainStoryboardFile</key>
    <string>LaunchScreen</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string></string>
    <key>UIBackgroundModes</key>
    <array>
      <string>remote-notification</string>
    </array>
  </dict>
</plist>

规格

Windows 10

Windows 10

Visual Studio 2017(企业版)

Visual Studio 2017(Enterprise edition)

Xamarin.Forms

Xamarin.Forms

推荐答案

我们在使我们的工作上遇到很多问题.这是我们在前台和后台工作的结果:

We had a lot of issues getting ours to work. This is what we came up with that worked in the foreground and background:

[Export("userNotificationCenter:willPresentNotification:withCompletionHandler:")]
public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
    //FOREGROUND
    handleNotification(notification.Request.Content.UserInfo);
    completionHandler(UNNotificationPresentationOptions.Alert);
}
public void ApplicationReceivedRemoteMessage(RemoteMessage remoteMessage)
{
    //REMOTE iOS 10
    //NOT USED CURRENTLY
    handleNotification(remoteMessage.AppData);
}
public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
    //BACKGROUND
    handleNotification(userInfo);
    completionHandler(UIBackgroundFetchResult.NewData);
}

private void handleNotification(NSDictionary userInfo)
{
    var payload = userInfo["TheStringIdentifierWhenSendingANotification"];

    var notificationData = JsonConvert.DeserializeObject<NotificationData>(payload.ToString());

    if (notificationData != null)
        MessagingCenter.Send<INotification, NotificationData>(this, Core.Helpers.Constants.Messaging.Notification, notificationData);
}

我看到的主要区别是我们的方法是willPresentNotification,而您的方法是didReceiveNotificationResponse.我不确定在更高的iOS版本中是否会更改,但是请尝试使用此方法,看看是否适合您.

The main difference that I see is that our method is willPresentNotification and yours is didReceiveNotificationResponse. I'm not sure if it changed in later iOS versions, but try this method and see if that works for you.

此外,我假设您收到的是 any 通知,那么您的证书和权利是否已正确设置;但请仔细检查以防万一.

Also, I'm assuming if you're receiving any notifications, then your certificate and entitlements are setup correctly; but double-check those just in case.

这篇关于当App在Xamarin.Forms的iOS中运行时未收到推送通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆