zoukankan      html  css  js  c++  java
  • 推送 iOS 10

    1:APNs通知与应用内消息对比

    极光文档上面是这么写的

    后来更直接的说法是:

    2:下面是介绍app不同状态下面接受到通知调用的方法:

    // iOS 10 Support,这个是程序在前台接受到通知是相应的方法

    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {

        // Required

        NSDictionary * userInfo = notification.request.content.userInfo;

        if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

            [JPUSHService handleRemoteNotification:userInfo];

        }

    //如果是前台收到了通知,也可以设置提醒,具体的需求问问产品

        completionHandler(UNNotificationPresentationOptionNone); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置

    }

    可以通过上面的枚举对前台通知进行设置

    // iOS 10 Support程序运行于后台 点击推送通知 都会走这个方法

    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

        // Required

        NSDictionary * userInfo = response.notification.request.content.userInfo;

        if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

            [JPUSHService handleRemoteNotification:userInfo];

        }

        NSLog(@"%@",response.notification.request.content.body);

        completionHandler();  // 系统要求执行这个方法

    }

    //程序已经杀死

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        [Bugly startWithAppId:@"49c45f90fe"];    

        //远程推送发送过来json字符串

        NSDictionary *userinfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];

    通知的内容存在于launchOptions中

     NSDictionary *userinfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];

    userinfo[@"aps"][@"alert"]

    里面可以获取到通知的内容

    //静默通知(静默通知app死掉的时候不进行

    静默推送:收到推送(没有文字没有声音),不用点开通知,不用打开APP,就能执行

    使用静默通知的关键意义是程序在后台的时候能够在不点击通知的(应为静默通知本身就没有通知栏)敲敲的执行后台的代码

    不管使用哪种三方的推送(极光,融云,个推,pushmeBaby),一定要设置

    一定要加"content-available" : 1  (只设置这个字段的话,可以实现后台推送完成接收)

    还有

    sound,alert  badge也不能加,加入的话也是静默推送,可以测试时添加

    实例静默推送内容

    因为静默推送的关键意义在于后台的推松,所以一定要记得打开app后台推送的功能

    如果升级了ios10,一定要按照最新的文档进行集成

    注意

    1:应当提供

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

     下面的方法会被上面的方法挤掉

    如果想收到静默通知,必须实现上面的方法而不是下面的

    即静默采用ios 7的方法替换原来的

    2:关于证书:如果自己公司的后台集成了极光推送,应当提供好推送的两个证书的p12文件

    生产证书不一定要上线

    3:判断程序在前台的方法

    [UIApplication sharedApplication].applicationState == UIApplicationStateActive

    4:极光推送不展示小红点

    application.applicationIconBadgeNumber = 0;

    [JPUSHService setBadge:0];(推向极光的服务器)

     关于通知的补充:

    1:收到前台通知调用的方法

    2:通知上面添加的点击事件,通过通知设置分类

     点击上面不同的按钮调用下面的方法,通过identifier进行区分

     

    3:

    4.继承公司自己的推送只需要

    appdelegate里面设置appid即可

    5:后台进行的静默通知,应该进行流量的判断

    下面是上网查的某位大神的关于静默推送的相关知识点(只是借鉴一下)

     注意:关于设置badgeNumber

    关于别名:

    设置别名退出的时候记得清空别名

     [JPUSHService setTags:nil alias:[RFMyInfoSaveTool shareMyInfoTools].userName fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {

            NSLog(@"%d-------------%@,-------------%@",iResCode,iTags,iAlias);

        }];

        

    2.设置监听登录策划成功的方法:

     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setAlis) name:kJPFNetworkDidLoginNotification object:nil];

     在登录成功的通知方法里面设置别名

    但是为了防止登录之后已经注册好了,但是登录者的手机号还未上传进来,我们应当到登录成功的回调里面再次设置别名

    //覆盖可能为空的别名

     [JPUSHService setTags:nil alias:[RFMyInfoSaveTool shareMyInfoTools].userName fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {

            NSLog(@"%d-------------%@,-------------%@",iResCode,iTags,iAlias);

        }];

    记得退出app的时候清空别名,不然退出了app还能收到通知,不符合产品的要求

     3.发布的时候记得做的事情

    1>记得将推送的发布证书转成p12传给极光的后台,如果是自己的后台进行维护的,就给自己的后台

    2>记得打开xcode的推送的模式

    3>测试推送ipa的时候记得选中极光的开发模式,否则ipa是收不到推送通知的

  • 相关阅读:
    mac安装protobuf2.4.1时报错./include/gtest/internal/gtest-port.h:428:10: fatal error: 'tr1/tuple' file not found和google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template
    java基础六 [异常处理](阅读Head First Java记录)
    安装和使用iOS的包管理工具CocoaPods
    Node.js的知识点框架整理
    java基础五 [数字与静态](阅读Head First Java记录)
    java基础四 [构造器和垃圾回收](阅读Head First Java记录)
    Appium学习路-安装篇
    Dell笔记本Ubuntu无线网卡驱动安装
    Ubuntu系统使用命令禁用触摸板等输入设备
    linux(ubuntu) 查看系统设备信息
  • 原文地址:https://www.cnblogs.com/chaoyueME/p/6139732.html
Copyright © 2011-2022 走看看