当我的应用在 fg 上时,我的应用如何发送推送通知?

Posted

技术标签:

【中文标题】当我的应用在 fg 上时,我的应用如何发送推送通知?【英文标题】:how can my app send a push notification when my app is on the fg? 【发布时间】:2016-02-17 20:44:10 【问题描述】:

我有一个 swift 应用程序。

我从我的服务器收到 GCM 推送通知。

ios 中,我了解操作系统会负责在我的应用位于后台时显示通知。

当我的应用在 fg 上并且我是显示通知的负责人时,我如何显示推送消息(通知)?

我应该使用本地推送(与远程推送相反)吗?

应用在后台时显示推送的代码是什么?

我知道这段代码处理向用户显示推送

但这不是通知,它只是打开一个警报

func application( application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void) 
        print("Notification received: \(userInfo)")
        // This works only if the app started the GCM service
        GCMService.sharedInstance().appDidReceiveMessage(userInfo);
        // Handle the received message
        // Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
        // [START_EXCLUDE]
        NSNotificationCenter.defaultCenter().postNotificationName(messageKey, object: nil,
            userInfo: userInfo)
        handler(UIBackgroundFetchResult.NoData);
        // [END_EXCLUDE]

【问题讨论】:

【参考方案1】:

您将收到通知(在 userInfo 中),但它不会显示应用程序是否在前台。您可以做的是在应用程序处于前台时触发本地通知或使用 UIAlertView。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

    application.applicationIconBadgeNumber = 0;  //For resetting the badge number to zero.           


    if (application.applicationState == UIApplicationStateActive)  //For checking if app is in foreground.        
                    

       UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Notification received:" message:[NSString stringWithFormat:@"Received notification while app was in foreground:\n%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
       [alertView show];          
      

【讨论】:

你有一个快速的例子吗?【参考方案2】:

如果您想在应用程序处于前台时处理通知,您可以使用像 https://github.com/LeoNatan/LNNotificationsUI 这样的自定义横幅。 代码应该是这样的:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

    if (application.applicationState == UIApplicationStateActive) 
                    
        LNNotification* notification = [LNNotification notificationWithMessage:@"Notification Message"];

        [[LNNotificationCenter defaultCenter] presentNotification:notification forApplicationIdentifier:@"app_identifier"];
    

【讨论】:

以上是关于当我的应用在 fg 上时,我的应用如何发送推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何向 ios 应用程序发送 Firebase 推送通知

当我的应用程序进行电池优化时,为啥我无法收到推送通知?

当我管理推送通知时如何知道我的应用程序是不是打开

悄悄地从我的服务器发送推送通知到我的应用程序

如何在 webview 应用程序中发送推送通知,其中通知在网站和 PWA 上进行

向 Parse 发送推送通知,如何在设备中接收它