JPUSH极光推送示例

最重要的是你得先按照极光iOS文档里面所述的进行配置,我只是在这里大体描述。
1、应用程序代理里面初始化:

[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];

[JPUSHService setupWithOption:launchOptions appKey:configs[@"APP_KEY"] channel:configs[@"CHANNEL"] apsForProduction:[configs[@"APS_FOR_PRODUCTION"] boolValue] ];

2、以下的几个方法也是少不了的:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // Required [JPUSHService registerDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo { // Required,For systems with less than or equal to iOS6 [JPUSHService handleRemoteNotification:userInfo]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler {

3、在didReceiveRemoteNotification中接收推送消息,接收到推送消息选择采用何种方式实现页面的跳转

- (void)application:(UIApplication *)application didReceiveRemoteNotification:
(NSDictionary *)userInfo fetchCompletionHandler:(void (^)
                                                 (UIBackgroundFetchResult))completionHandler {
    //用来清除App icon上面的数字
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    [JPUSHService setBadge:0];
    [JPUSHService resetBadge];

    // IOS 7 Support Required
    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);

    if (application.applicationState == UIApplicationStateActive) {
        //使用通知的方式来解决当程序active的时候接收到推送
        NSNotification *note = [[NSNotification alloc]initWithName:@"MSG" object:@1 userInfo:nil];
        [[NSNotificationCenter defaultCenter]postNotification:note];
    } else {
        //自己随便定义页面了
        WDH5ShowViewController *v5 = [[WDH5ShowViewController alloc]init];
        v5.indexF = 7;
        UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
        UIViewController *vc = [(UINavigationController *)self.window.rootViewController visibleViewController];
        //判断当前页面是不是我所要跳转的页面
        if ([vc isKindOfClass:[WDH5ShowViewController class]]) {
            LILog(@"ok");
            //是的话就刷新页面
            NSNotification *note = [[NSNotification alloc]initWithName:@"MSGLOAD" object:@1 userInfo:nil];
            [[NSNotificationCenter defaultCenter]postNotification:note];
        } else {
            //不是,那就跳转
            NSArray * ctrlArray = vc.navigationController.viewControllers;
            UIViewController *mainC = [ctrlArray objectAtIndex:2];
            mainC.navigationItem.title = @"订单管理";
            [vc.navigationController popToViewController:[ctrlArray objectAtIndex:2] animated:NO];
            [navigationController pushViewController:v5 animated:NO];
        }
    }
}

接收到消息之后判断跳转到对应的页面。当然,程序activity状态的时你是听不到任何推送的声音的,当然你可以在此处加上,反正我一般是不会加的,而只是选择使用通知的方式去处理,具体看你喽。

4、以上已经完成了推送消息,但是具体推送给谁,这还得加上所谓的标识,具体可以看看极光推送有哪几种方式,自己选择配置。我选择的方式配置tag了,具体如下:

//设置推送消息发送的tag值
    NSNumber *cid = [[NSUserDefaults standardUserDefaults]objectForKey:@"CustomerId"];
    [JPUSHService setTags:[NSSet setWithObjects:[NSString stringWithFormat:@"%@", cid], nil] callbackSelector:nil object:nil];//设置tag

这个设置可以设置在登录之后,这样可以定点推送了。
5、当你退出程序的时候,那就不需要再进行推送,所以你还得把推送给人家关了,下面就是如何关推送:

//清除远程推送
    [[UIApplication sharedApplication] unregisterForRemoteNotifications];

6、你以为结束了吗?No,因为你这样子做的话,你再也收不到推送了,怪我喽。没事,你可以试试下面的方法,或许可以避免问题了。

[[UIApplication sharedApplication] registerForRemoteNotifications];

选择一个合适的位置,加上上面一句代码就可以解决了。

有何问题,可以指点出来,以便让我能够改正,TKS。

你可能感兴趣的:(ios)