2019-08-29 16:58:39 qq_42239406 阅读数 68
  • Android极光推送-手把手演示快速项目实战集成

    几乎每个app项目都会用到推送吧。我从2015年起到现在其中极光推送用了很多次了,最近项目又要用到极光推送,而最近因网易博客要关闭了,刚好要做有关博文的迁移到csdn,所以整理了一下。 那么为什么要录制视频呢? 本人在实战项目集成使用的时候,看了很多文章,如有标题党《2分钟搞定极光推送》, 如有的存在一些问题:内容不全、思路不清晰、简单问题复杂化等等。我录制视频的目的正如标题中“手把手演示快速项目实战集成”。

    353 人正在学习 去看看 尹宇华

下面是我运行推送ios的时候报错信息

{}
    at cn.jiguang.common.connection.NativeHttpClient._doRequest(NativeHttpClient.java:234)
    at cn.jiguang.common.connection.NativeHttpClient.doRequest(NativeHttpClient.java:99)
    at cn.jiguang.common.connection.NativeHttpClient.sendPost(NativeHttpClient.java:86)
    at cn.jpush.api.push.PushClient.sendPush(PushClient.java:163)
    at cn.jpush.api.JPushClient.sendPush(JPushClient.java:194)
    at org.kuaidi.utils.JiPushUtil.sendToAllIos(JiPushUtil.java:137)
    at org.kuaidi.utils.JiPushUtil.main(JiPushUtil.java:153)

下面是我写的方法
/**
 * 发送给所有IOS用户
 * @param notification_title 通知内容标题
 * @param msg_title 消息内容标题
 * @param msg_content 消息内容
 * @param extrasparam 扩展字段
 * @return 0推送失败,1推送成功
 */
public int sendToAllIos(String notification_title, String msg_title, String msg_content, String extrasparam) {
    int result = 0;
    try {
        PushPayload pushPayload= buildPushObject_ios_all_alertWithTitle(notification_title,msg_title,msg_content,extrasparam);
        LOGGER.info(""+pushPayload);
        PushResult pushResult=jPushClient.sendPush(pushPayload);
        LOGGER.info(""+pushResult);
        //System.out.println(pushResult+"IOS");
        if(pushResult.getResponseCode()==200){
            result=1;
        }
    } catch (Exception e) {

        e.printStackTrace();
    }
    return result;
}
/**
 * 向ios平台所有用户推送消息
 * @param notification_title
 * @param msg_title
 * @param msg_content
 * @param extrasparam
 * @return
 */
private static PushPayload buildPushObject_ios_all_alertWithTitle( String notification_title, String msg_title, String msg_content, String extrasparam) {
    LOGGER.info("----------向ios平台所有用户推送消息中.......");
    return PushPayload.newBuilder()
            //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
            .setPlatform(Platform.ios())
            //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
            .setAudience(Audience.all())
            //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
            .setNotification(Notification.newBuilder()
                    //指定当前推送的android通知
                    .addPlatformNotification(IosNotification.newBuilder()
                            //传一个IosAlert对象,指定apns title、title、subtitle等
                            .setAlert(notification_title)
                            //直接传alert
                            //此项是指定此推送的badge自动加1
                            .incrBadge(1)
                            //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
                            // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
                            .setSound("default")
                            //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                            .addExtra("iosNotification extras key",extrasparam)
                            //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
                            // .setContentAvailable(true)

                            .build())
                    .build()
            )
            //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
            // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
            // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
            .setMessage(Message.newBuilder()
                    .setMsgContent(msg_content)
                    .setTitle(msg_title)
                    .addExtra("message extras key",extrasparam)
                    .build())

            .setOptions(Options.newBuilder()
                    //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                    .setApnsProduction(ApnsProduction)
                    //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                    .setSendno(1)
                    //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
                    .setTimeToLive(86400)
                    .build())
            .build();
}

 

public static void main(String[] args) {
    JiPushUtil testMain = new JiPushUtil();
    testMain.sendToAllAndroid("[伽罗话题]","家乡的魂灵随原上草木而复苏","?","?");
    testMain.sendToAllIos("[伽罗话题]","不学无术悲哀","?","?");
}

 

2019-09-04 14:11:59 qtb58 阅读数 167
  • Android极光推送-手把手演示快速项目实战集成

    几乎每个app项目都会用到推送吧。我从2015年起到现在其中极光推送用了很多次了,最近项目又要用到极光推送,而最近因网易博客要关闭了,刚好要做有关博文的迁移到csdn,所以整理了一下。 那么为什么要录制视频呢? 本人在实战项目集成使用的时候,看了很多文章,如有标题党《2分钟搞定极光推送》, 如有的存在一些问题:内容不全、思路不清晰、简单问题复杂化等等。我录制视频的目的正如标题中“手把手演示快速项目实战集成”。

    353 人正在学习 去看看 尹宇华

 

极光推送平台,需要上传配置开发测试的iOS推送证书(开发环境)和上架到App Store的ios 推送证书!(生产环境)

 

下面介绍如何申请这两个环境的推送证书p12文件!

 

 

 

 

APP要推送通知首先要在创建APPID时勾选推送服务。

 

苹果开发者中心添加新应用id教程

 

如果你已经有应用id并且已经开启了推送权限,直接申请即可!

 

1、iOS开发推送证书(开发环境)

 

这里使用Appuploader工具申请,可以辅助直接在Windows申请推送证书p12文件!

 

Appuploader安装教程

 

1、打开Appuploader,用苹果开发者账号登录。

 

 

2、选择证书选项

 

 

3、点击+ADD\选择Apple Push Notification service SSL(Sandbox) —iOS开发环境推送证书

输入证书名称(随意)、邮箱(随意)、密码,选择你的APP对于的应用id,点击ok创建。

 

 

4、下载保存好.p12 iOS证书文件

 

推送证书是没描述文件的,只有一个p12,不用申请描述文件。

 

 

二、iOS发布推送证书(生产环境)

 

 

1、打开Appuploader,用苹果开发者账号登录。

 

 

2、选择证书选项

 

 

3、点击+ADD\选择Push Notification service SLL(Sandbox & Producyion)—iOS生产环境推送证书

输入证书名称(随意)、邮箱(随意)、密码,选择你的APP对于的appids,点击ok创建。

 

 

3、下载保存好.p12 iOS证书文件

 

 

申请好对应环境上传即可

 

2017-11-06 09:59:22 qq_26300747 阅读数 3999
  • Android极光推送-手把手演示快速项目实战集成

    几乎每个app项目都会用到推送吧。我从2015年起到现在其中极光推送用了很多次了,最近项目又要用到极光推送,而最近因网易博客要关闭了,刚好要做有关博文的迁移到csdn,所以整理了一下。 那么为什么要录制视频呢? 本人在实战项目集成使用的时候,看了很多文章,如有标题党《2分钟搞定极光推送》, 如有的存在一些问题:内容不全、思路不清晰、简单问题复杂化等等。我录制视频的目的正如标题中“手把手演示快速项目实战集成”。

    353 人正在学习 去看看 尹宇华

关于推送证书的申请不再赘述。
下载极光推送的包之后,直接拖进项目中即可使用。
在appdelegate中插入如下代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application setApplicationIconBadgeNumber:0];
    [application cancelAllLocalNotifications];

    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//         可以添加自定义categories
//         NSSet<UNNotificationCategory *> *categories for iOS10 or later
//         NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
    }
    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

    [JPUSHService setupWithOption:launchOptions appKey:appKey
                          channel:channel
                 apsForProduction:isProduction
            advertisingIdentifier:nil];

    return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    /// Required - 注册 DeviceToken
    [[NSUserDefaults standardUserDefaults] setObject:@{@"deviceType":@"iOS", @"deviceToken":deviceToken} forKey:@"devieceInfo"];

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

-(void)didReceiveJPushNotification:(NSDictionary *)notiDict{
    //在这里统一处理接收通知的处理,notiDict为接收到的所有数据
}

//// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler
{
    NSDictionary * userInfo = notification.request.content.userInfo;

    UNNotificationRequest *request = notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content; // 收到推送的消息内容

    NSNumber *badge = content.badge;  // 推送消息的角标
    NSString *body = content.body;    // 推送消息体
    UNNotificationSound *sound = content.sound;  // 推送消息的声音
    NSString *subtitle = content.subtitle;  // 推送消息的副标题
    NSString *title = content.title;  // 推送消息的标题

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
        NSLog(@"iOS10 前台收到远程通知:%@", [self logDic:userInfo]);
        [self didReceiveJPushNotification:userInfo];
    }
    else {
        // 判断为本地通知
        NSLog(@"iOS10 前台收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
        [self didReceiveJPushNotification:userInfo];
    }
    completionHandler(UNNotificationPresentationOptionSound); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置
}
//
//// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler
{
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    UNNotificationRequest *request = response.notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content; // 收到推送的消息内容

    NSNumber *badge = content.badge;  // 推送消息的角标
    NSString *body = content.body;    // 推送消息体
    UNNotificationSound *sound = content.sound;  // 推送消息的声音
    NSString *subtitle = content.subtitle;  // 推送消息的副标题
    NSString *title = content.title;  // 推送消息的标题

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
        NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]);
        [self didReceiveJPushNotification:userInfo];
    }
    else {
        // 判断为本地通知
        NSLog(@"iOS10 收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
        [self didReceiveJPushNotification:userInfo];
    }
    completionHandler();  // 系统要求执行这个方法
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    // Required, iOS 7 Support
    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
}

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

    // Required,For systems with less than or equal to iOS6
    [JPUSHService handleRemoteNotification:userInfo];
}

设置别名:(登录成功之后设置userID为别名)

[JPUSHService setAlias:[PPUser currentUser].userID completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) { _seq = seq;} seq:_seq];//这里我不知道seq处理是否又问题,但这么做可以用
2016-07-29 18:40:31 shengdaVolleyball 阅读数 8313
  • Android极光推送-手把手演示快速项目实战集成

    几乎每个app项目都会用到推送吧。我从2015年起到现在其中极光推送用了很多次了,最近项目又要用到极光推送,而最近因网易博客要关闭了,刚好要做有关博文的迁移到csdn,所以整理了一下。 那么为什么要录制视频呢? 本人在实战项目集成使用的时候,看了很多文章,如有标题党《2分钟搞定极光推送》, 如有的存在一些问题:内容不全、思路不清晰、简单问题复杂化等等。我录制视频的目的正如标题中“手把手演示快速项目实战集成”。

    353 人正在学习 去看看 尹宇华

1.极光推送包括:APNs推送,JPush应用内消息。

JPush 代理开发者的应用(需要基于开发者提供的应用证书),向苹果 APNs 服务器推送。由 APNs Server 推送到 iOS 设备上。

JPush 应用内推送部分,即 App 启动时,内嵌的 JPush SDK 会开启长连接到 JPush Server,从而 JPush Server 可以推送消息到 App 里。

2.根据极光文档中JPush集成指南配置证书,导入框架,配置工程。

3.在appDelegate的didfinishlaunching方法里添加

    //注册极光推送

[JPUSHService setupWithOption:nil appKey:@"" channel:nil apsForProduction:YES];

   //获取自定义消息

    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

    [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];



    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];

    }

#pragma mark 获取自定义消息内容

- (void)networkDidReceiveMessage:(NSNotification *)notification {

    NSDictionary * userInfo = [notification userInfo];

    NSString *content = [userInfo valueForKey:@"content"];

    NSDictionary *extras = [userInfo valueForKey:@"extras"];

    NSString *customizeField1 = [extras valueForKey:@"123456"]; //自定义参数,key是自己定义的

    NSLog(@"自定义message:%@",userInfo);

    NSLog(@"推%@",content);

    NSLog(@"推%@",extras);

    NSLog(@"推%@",customizeField1);

}

#pragma mark 接收推送的消息

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

{

    NSLog(@"推送的消息:NSDictionary:%@",userInfo);

    [JPUSHService handleRemoteNotification:userInfo];

    completionHandler(UIBackgroundFetchResultNewData);

}

#pragma mark 极光推送添加的内容

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

     [JPUSHService registerDeviceToken:deviceToken];

}

#pragma mark 失败回调方法

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

{

    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);

}

#pragma mark 极光推送设置别名和标签,后台可以根据别名和签名给指定的用户发送消息

温馨提示:设置别名和签名时注意call back的处理结果,返回值为0才设置成功

        if ([dic[@"weProtectUserType"] isEqualToString:@"administrator"]) {

             NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:@"A", nil];

            [JPUSHService setTags:set alias:alisa fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {

                NSLog(@"设置签名与别名1:%d",iResCode);

                NSLog(@"推送返回的%@%@",iTags,iAlias);

            } ];

        }else

        {

             NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:@"C", nil];

            [JPUSHService setTags:set alias:alisa fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {

                NSLog(@"设置签名与别名2:%d",iResCode);

                NSLog(@"推送返回的%@%@",iTags,iAlias);

            } ];

        }
2016-04-08 14:31:42 Chowbindeblog 阅读数 234
  • Android极光推送-手把手演示快速项目实战集成

    几乎每个app项目都会用到推送吧。我从2015年起到现在其中极光推送用了很多次了,最近项目又要用到极光推送,而最近因网易博客要关闭了,刚好要做有关博文的迁移到csdn,所以整理了一下。 那么为什么要录制视频呢? 本人在实战项目集成使用的时候,看了很多文章,如有标题党《2分钟搞定极光推送》, 如有的存在一些问题:内容不全、思路不清晰、简单问题复杂化等等。我录制视频的目的正如标题中“手把手演示快速项目实战集成”。

    353 人正在学习 去看看 尹宇华

之前有两篇文章关于推送证书配置的,特别是对于新手很有用,可以去看看.

http://www.cnblogs.com/wolfhous/p/5344871.html

http://www.cnblogs.com/wolfhous/p/5344853.html

====================

开始集成极光推送

1,官网下载sdk以及demo:    https://www.jpush.cn/common/products

2,查看文档: http://docs.jpush.io/guideline/ios_guide/

3:然后新建工程,应该是这样的

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 


 

IOS极光推送

阅读数 427

没有更多推荐了,返回首页