我正在使用UrbanAirship添加推送通知。我的AppDelegate.m
中有这两种方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Create Airship options dictionary and add the required UIApplication launchOptions
NSMutableDictionary *takeOffOptions = [NSMutableDictionary dictionary];
[takeOffOptions setValue:launchOptions forKey:UAirshipTakeOffOptionsLaunchOptionsKey];
// Call takeOff (which creates the UAirship singleton), passing in the launch options so the
// library can properly record when the app is launched from a push notification. This call is
// required.
//
// Populate AirshipConfig.plist with your app's info from https://go.urbanairship.com
[UAirship takeOff:takeOffOptions];
// Set the icon badge to zero on startup (optional)
[[UAPush shared] resetBadge];
// Register for remote notfications with the UA Library. This call is required.
[[UAPush shared] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)];
// Handle any incoming incoming push notifications.
// This will invoke `handleBackgroundNotification` on your UAPushNotificationDelegate.
[[UAPush shared] handleNotification:[launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]
applicationState:application.applicationState];
// Override point for customization after application launch.
return YES;
}
和这个方法:
// Implement the iOS device token registration callback
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
UALOG(@"APN device token: %@", deviceToken);
// Updates the device token and registers the token with UA. This won't occur until
// push is enabled if the outlined process is followed.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *alias = [defaults objectForKey:@"user_id"];
[[UAPush shared] setAlias:@"test-alias"];
[[UAPush shared] registerDeviceToken:deviceToken];
}
我从UrbanAirship说明中得到了它们:https://docs.urbanairship.com/display/DOCS/Getting+Started:+iOS:+Push
但我很困惑如何指定我希望推送通知登陆的屏幕。那做了什么?而且,我的服务器发送一些JSON以及推送。我在哪里以及如何从该JSON中提取数据?
谢谢!
答案 0 :(得分:1)
您正在将JSON传递给handleNotification
方法。这是您编写的方法,还是urbanairship
代码的一部分? (我不确定它们是否提供除服务器代码之外的客户端代码)。
如果它是您编写的方法,则可以从该方法中的JSON访问数据。
如果没有,您可以编写自己的方法并将相同的数据传递给它。
只有在通知到达时应用程序未运行且用户点击通知才能打开应用程序,您才能以这种方式访问通知JSON。如果用户点按应用启动图标,该数据将会丢失。
您可以使用JSON中的自定义属性指定着陆屏幕。您有责任解析该属性并确定要显示的视图。
如果应用程序在前台运行时通知到达,您还应该实现application:didReceiveRemoteNotification:
以处理通知数据。
答案 1 :(得分:1)
您必须在应用程序委托中处理远程推送通知:
- (void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo
您可以从此处访问根视图控制器并触发其他视图控制器的显示。
来自文档:
如果应用程序正在运行并收到远程通知,则应用程序会调用此方法来处理通知。您对此方法的实现应使用通知采取适当的操作过程。例如,您可以将其用作连接服务器的信号并下载等待应用程序的数据
userInfo字典包含通过城市飞艇发送的其他数据。
您可以在Reference
中找到更多信息答案 2 :(得分:1)
简短的回答是:你没有(因为没有为你提供这项功能。)
如果在您的应用运行时收到了推送,则会调用-[UIApplicationDelegate application:didReceiveRemoteNotification:]
。在您实施此方法时,您有责任采取适当的措施(例如,显示消息,导航到应用程序的特定区域。)
如果应用正在运行并收到远程通知,则应用 调用此方法来处理通知。你的实施 此方法应使用通知采取适当的方法 行动。例如,您可以将其用作连接到a的信号 服务器并下载等待应用程序等待的数据。
userInfo字典包含其值为另一个的aps密钥 字典。虽然您不应该需要aps中的信息 字典,您可以使用以下键检索其内容:
userInfo字典也可能包含自定义的自定义数据 根据JSON模式提供程序。自定义数据的属性 应该在与aps字典相同的级别指定。然而, 自定义属性不应用于海量数据传输 因为每个通知有严格的大小限制(256字节)和 交货不保证。