我已经实施了UrbanAirship以进行推送通知。当应用程序在后台关闭时,我会收到通知。但是,当应用程序运行时,我没有收到通知。
我附上了我的代码。有人可以调查一下,让我知道我在这里缺少什么吗?
谢谢。
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中
<?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
Visual Studio 2017(企业版)
Xamarin.Forms
答案 0 :(得分:0)
我们有很多问题需要我们的工作。这就是我们提出的在前景和背景中工作的内容:
[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版本中发生变化,但请尝试使用此方法,看看它是否适合您。
此外,我假设您收到任何通知,然后您的证书和权利设置正确;但仔细检查一下。