`
jackeysion
  • 浏览: 129267 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

iOS应用极光推送接收通知并打开指定功能界面

    博客分类:
  • iOS
阅读更多
一、首先在iOS项目中嵌入极光推送的SDK,具体方法参照极光推送官网,里面涉及一些证书相关的东西,比安卓略显复杂
二、在应用的AppDelegate.m类中,初始化极光推送的sdk,实现接收消息的方法。



#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    // ========================================================================
    // 顶部状态栏白色
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:NO];
    // ========================================================================
    //
    [DBManager initialDatabases];
    // ========================================================================
    // 百度地图API
    _mapManager = [[BMKMapManager alloc]init];
    // 如果要关注网络及授权验证事件,请设定     generalDelegate参数
    BOOL ret = [_mapManager start:@"2trUTYe3lbEO527FESyQRwKN"  generalDelegate:nil];
    if (!ret) {
        NSLog(@"manager start failed!");
    }
    // Add the navigation controller's view to the window and display.
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];
    // 百度地图结束
    // ========================================================================

    // 极光推送API。此处初始化极光推送的SDK
    // Required
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //可以添加自定义categories
        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                          UIUserNotificationTypeSound |
                                                          UIUserNotificationTypeAlert)
                                              categories:nil];
    } else {
        //categories 必须为nil
        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                          UIRemoteNotificationTypeSound |
                                                          UIRemoteNotificationTypeAlert)
                                              categories:nil];
    }
    
    // Required
    //如需兼容旧版本的方式,请依旧使用[JPUSHService setupWithOption:launchOptions]方式初始化和同时使用pushConfig.plist文件声明appKey等配置内容。
    [JPUSHService setupWithOption:launchOptions appKey:jPushAppKey channel:jPushChannel apsForProduction:isProduction];
    
    // ========================================================================
    
    
    return YES;
}


//- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
//{
//    return UIInterfaceOrientationMaskPortrait;
//}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    [application setApplicationIconBadgeNumber:0];
    [application cancelAllLocalNotifications];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}


// =============================JPush 监听方法======================================================================
/* 
 // 官方建议开发者加上API里面提供下面 5 种类型的通知:
 extern NSString * const kJPFNetworkDidSetupNotification; // 建立连接
 
 extern NSString * const kJPFNetworkDidCloseNotification; // 关闭连接
 
 extern NSString * const kJPFNetworkDidRegisterNotification; // 注册成功
 
 extern NSString * const kJPFNetworkDidLoginNotification; // 登录成功
 */

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"=======");
    NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]);
    [JPUSHService registerDeviceToken:deviceToken];
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings: (UIUserNotificationSettings *)notificationSettings {
    NSLog(@"bbb");
}

// Called when your app has been activated by the user selecting an action from
// a local notification.
// A nil action identifier indicates the default action.
// You should call the completion handler as soon as you've finished handling
// the action.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *) notification completionHandler:(void (^)())completionHandler {
    NSLog(@"ccccc");
}

// Called when your app has been activated by the user selecting an action from
// a remote notification.
// A nil action identifier indicates the default action.
// You should call the completion handler as soon as you've finished handling
// the action.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *) identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {
    NSLog(@"aaaaa");
}
#endif

// 以下两个方法为接收极光消息的方法,useInfo为接收到的消息,可以打印到控制台看一下。将接收到的消息放到通知中心。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *) userInfo {
    [JPUSHService handleRemoteNotification:userInfo];
    NSLog(@"*********");
    NSLog(@"收到通知:%@", [self logDic:userInfo]);
   
    NSNotification *notification = [[NSNotification alloc] initWithName:kJPFNetworkDidReceiveMessageNotification object:nil userInfo:userInfo];
    [[NSNotificationCenter defaultCenter] postNotification:notification];
   
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler: (void (^)(UIBackgroundFetchResult)) completionHandler {
    
    [JPUSHService handleRemoteNotification: userInfo];
    
   
    NSNotification *notification = [[NSNotification alloc] initWithName:kJPFNetworkDidReceiveMessageNotification object:nil userInfo:userInfo];
    [[NSNotificationCenter defaultCenter] postNotification:notification];
   
    NSLog(@"………………………………");
    NSLog(@"收到通知:%@", [self logDic:userInfo]);
    
    completionHandler(UIBackgroundFetchResultNewData);
}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    NSLog(@"xxxx");
    [JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];
}

// log NSSet with UTF8
// if not ,log will be \Uxxx
- (NSString *) logDic:(NSDictionary *) dic {
    if (![dic count]) {
        return nil;
    }
    NSString *tempStr1 =
    [[dic description] stringByReplacingOccurrencesOfString:@"\\u"
                                                 withString:@"\\U"];
    NSString *tempStr2 =
    [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    NSString *tempStr3 =
    [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
    NSString *str =
    [NSPropertyListSerialization propertyListFromData:tempData
                                     mutabilityOption:NSPropertyListImmutable
                                               format:NULL
                                     errorDescription:NULL];
    return str;
}

@end



三、在根视图(我的项目的根视图是TabBarViewController)注册消息通知,成为上面指定消息的观察者

#import <Foundation/Foundation.h>
#import "DWKxbTabBarController.h"

@implementation DWKxbTabBarController

-(void) viewDidLoad{
    [super viewDidLoad];
    self.selectedIndex = 1;
    
   
    // 注册消息通知
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
 
}

// 具体的消息处理方法,比如我这里跳转到另外一个ViewController。
- (void)networkDidReceiveMessage:(NSNotification *)notification {
    NSLog(@"tabxxxxxxxxxxxx");
    NSDictionary * userInfo = [notification userInfo];
    
    NSLog(@"%@", userInfo);
    
    self.selectedIndex = 1;
    
// 获取tabBar的当前选择视图
    DWLifeNavigationController *life = self.selectedViewController;
    // rootViewController
// 获取NavigationController的根视图(索引为0的child) 
    
    DWColorfulLifeViewController *root = life.childViewControllers[0];
    root.webViewParam = @"foods";
// 根据在storyboard中的连线跳转到指定的ViewController
    [root performSegueWithIdentifier:@"go2SpecialService" sender:root];
}

@end


PS: 第一次做这种功能,mark下来。文章代码里的颜色和粗体不起作用,好桑心
分享到:
评论

相关推荐

    极光推送客户端demo

    极光推送(Aurora Push)是一款广泛应用于移动应用开发中的消息推送服务,它能够帮助开发者向用户实时推送通知和消息,提升用户活跃度和应用粘性。本项目提供了一个极光推送客户端的示例,旨在帮助开发者快速理解和接...

    C#极光推送Deom

    极光推送是融云公司推出的一款高效、稳定、易用的推送服务,广泛应用于iOS、Android等平台,旨在帮助开发者轻松实现消息推送功能。 在本Demo中,你可以学习到以下关键知识点: 1. **极光推送API集成**:了解如何在...

    app消息推送(极光推送)

    【极光推送】是移动端应用开发中常用的第三方消息推送服务,尤其在Android和iOS平台上的应用广泛。通过极光推送,开发者可以实现从服务器端向客户端实时、高效地发送个性化消息,提高用户活跃度和黏性。在Java端进行...

    phoneGap极光推送插件。

    PhoneGap与极光推送的结合使用,主要是为了让PhoneGap构建的跨平台应用能够接收并处理来自极光推送服务器的消息。下面我们将详细探讨这两个工具以及它们的集成过程。 首先,集成极光推送到PhoneGap项目中,你需要在...

    极光推送源码

    极光推送(JPush)是一款广泛应用于移动应用中的消息推送服务,它允许开发者向用户发送即时消息,提高用户活跃度和应用粘性。本源码包提供了极光推送服务的核心功能,使得开发者可以深度定制推送逻辑,实现根据不同...

    极光推送C#实例(含android例子)

    在iOS和Android系统中,每个安装了应用的设备都会有一个唯一的标识符,对于极光推送,这就是设备token。在C#和Android项目中,我们需要获取并保存这个token,以便后续向特定设备发送消息。 在C#环境下,我们可以...

    极光推送(C#服务端)

    极光推送(JPush)是极光公司推出的一款高效、稳定、便捷的移动消息推送服务,广泛应用于Android、iOS以及Web应用中。由于官方并未提供专门的C#服务端SDK,开发者需要自行实现与极光推送接口的对接。本项目正是针对...

    JPush:极光推送:接收自定义消息,动态控制通知栏是否提醒,消息总列表更新消息,消息详情界面自动更新消息详情

    极光推送(JPush)是基于Java开发的一款高效、稳定的移动推送服务,广泛应用于Android和iOS平台,帮助企业或开发者向用户精准推送消息。本项目主要关注如何在接收自定义消息时,实现动态控制通知栏提醒、消息总列表...

    极光推送手机端APP demo下载

    极光推送服务支持Android和iOS平台,能够实现单播、群播、标签播等多种推送方式,同时提供自定义消息和通知,满足不同应用场景的需求。 在提供的"极光推送手机端APP demo下载"中,我们可以看到一些关键的项目文件,...

    JPush Utils_极光推送_jpush推送工具_jpush_推送工具_

    以上知识点涵盖了极光推送工具类的主要功能,这些工具和接口的使用有助于开发者更便捷地集成和管理极光推送服务,提升应用的用户体验和运营效果。在实际项目中,开发者可以根据需要选择相应的类和方法,结合文件名称...

    极光推送demo

    在移动应用开发中,及时的通知和消息推送是保持用户与应用互动的重要手段,而极光推送正好为此提供了强大的支持。 集成极光推送非常简单,通常只需几个步骤。首先,你需要在项目中引入极光推送的SDK。从压缩包文件...

    极光发送消息通知

    极光推送全称为JPush(极光推送),是极光公司提供的一个云服务,它能够帮助开发者将消息或通知推送到Android、iOS以及Web等多平台的设备上。通过极光推送,开发者可以实现一对多、一对一的消息推送,以及自定义消息...

    极光推送V3 C#服务端

    极光推送(JPush)是阿里云推出的一款高效、稳定、易用的移动推送服务,它可以帮助开发者向iOS、Android设备发送自定义消息或者通知,提高用户活跃度和黏性。V3版本是对JPush服务的第三次重大更新,带来了更多功能和...

    集成极光推送和环信智能机器人的demo

    1. 集成极光推送SDK:包括在项目中导入极光推送的依赖库,配置AndroidManifest.xml文件,初始化推送服务,并设置接收推送消息的回调。 2. 注册和配置环信机器人:创建环信应用,获取AppKey和AppSecret,初始化环信...

    极光推送 IM

    极光推送IM是一款专为移动应用开发者设计的即时通讯服务,它可以帮助开发者快速集成聊天功能,提高用户体验,增强用户粘性。在这个配置好的版本中,您需要注意以下几点以确保其正常运行: 1. **包名替换**:由于...

    JPush_Demo极光推送demo

    "JPush_Demo"是一个用于演示极光推送功能的示例项目,它包含了集成极光推送服务的基本步骤和关键代码,是学习和理解如何在自己的应用程序中使用JPush的绝佳资源。这个demo旨在帮助开发者快速上手,避免在实际开发...

    推聊是一个基于极光推送 (JPush) 的手机聊天系统。支持群聊与点对点聊天。当前包括 Android客户端、iOS.zip

    推聊是一款采用极光推送(JPush)技术构建的手机聊天应用,旨在提供群聊和一对一私聊功能,覆盖Android和iOS两大主流移动操作系统。在深入解析推聊系统的构成之前,我们先了解一下极光推送(JPush)的核心概念。 ...

    iOS点击推送消息跳到应用指定页面方法

    首先,iOS中的推送服务通常依赖于第三方推送服务提供商,如极光推送(JPush)等。这些服务提供商提供API和SDK,帮助开发者集成推送功能。在集成之前,需要在服务提供商的后台注册应用并获取App Key,然后在Xcode的...

    Thinkphp开发--集成极光推送

    3. 在对应的控制器方法中,引入极光推送的类库,并设置推送内容、目标平台(例如iOS或Android)以及接收人群(可以是单个设备、标签组或广播)。这里需要注意,由于某些原因,可能无法使用`try-catch`结构来处理极光...

    jchat-ios, 在 JMessage SDK,JChat iOS应用,一个真正的应用基于.zip

    4. 消息推送:启用JMessage的极光推送服务,实现实时的消息推送。 5. 错误处理:添加错误处理机制,确保在异常情况下应用的稳定运行。 总的来说,JChat-iOS是一个基于JMessage SDK的优秀示例,对于想要开发即时通讯...

Global site tag (gtag.js) - Google Analytics