精华内容
下载资源
问答
  • 关于Android O不能正常推送通知问题

    千次阅读 2018-03-27 19:26:25
    第一行代码自学Android时(虽然三天打鱼两天晒网,进度慢的吓人)看到NotificationCompat.Builder()方法被划了横线,刚开始时了一下Android Studio给的警告,没有找到替代的方法,但是可以正常推送,就没有...

            在看第一行代码自学Android时(虽然三天打鱼两天晒网,进度慢的吓人)看到NotificationCompat.Builder()方法被划了横线,刚开始时看了一下Android Studio给的警告,没有找到替代的方法,但是可以正常推送,就没有在意。后来因为手机问题,换了小米6,刚好升级到8.0,发现无法推送通知。百度后发现,Android O做很多修改,如悬浮窗、通知、广播、WiFi、蓝牙等。Android O推送通知需要设置Notification Channel。代码如下:

    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                String id = "my_channel_01";
                NotificationChannel mChannel = null;//创建Notification Channel对象
                //如果版本号为8.0以上,定义Notification Channel
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                    mChannel = new NotificationChannel(id,"my_channel", NotificationManager.IMPORTANCE_DEFAULT);//设置唯一的渠道通知Id
                    mChannel.enableLights(true);//开启灯光
                    mChannel.setLightColor(Color.RED);
                    mChannel.enableVibration(true);//开启震动
                    mChannel.setVibrationPattern(new long[]{0,1000,0,1000});//8.0以下版本的效果一样,都是震动
                    manager.createNotificationChannel(mChannel);//在NotificationManager中注册渠道通知对象
                }
                //定义通知,都可适配
                NotificationCompat.Builder notification=new NotificationCompat.Builder(this,"1");
                notification.setContentTitle("你有一条新的联系人信息")
                        .setContentText("快来更新联系人信息!!!!!!!")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.drawable.ic_launcher_foreground)
                        .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.notification1)))
                        .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
                        //.setVibrate(new long[]{0,1000,0,1000})
                        //.setLights(Color.RED,1000,1000)//震动和灯光一样都需要Notification Channel开启灯光和震动,才能有效果
                        .setPriority(NotificationCompat.PRIORITY_MAX)//悬浮通知
                        .setContentIntent(pi)
                        .setChannelId(id)//设置通知Id
                        .setAutoCancel(true);
                manager.notify(1,notification.build());

    百度时看的如下链接:https://www.cnblogs.com/qyun/p/6715195.html

    震动和图片什么的都正常,不知道为什么我的呼吸灯不亮。如果有可以亮的,麻烦告诉下解决办法。我实在是太菜了!!!


    展开全文
  • 公司新增推送服务器,要用源生,一两年前写过,不过最近几个项目是用极光,现在再整理一下,废屁不多放, 源生推送和极光的区别: 1. 注册推送 这点一样,是极光推送进行加层封装了一下 2.获取token ,注意...

    公司新增推送服务器,要用源生,一两年前写过,不过最近几个项目是用极光,现在再整理一下,废屁不多放,看

    源生推送和极光的区别:

    1. 注册推送       这点一样,是极光推送进行加层封装了一下

    2.获取token ,注意token开发和发布获取的不同,不能通用

    3.服务器逻辑:

           源生:自己服务器拿证书,token,消息json串(角标,声音等)去请求APNs苹果推送服务器

           极光推送:自己服务器先给极光发送需要推送的一些设置,请求APNs 由极光去做

    4.实现代理:

          源生:实现系统代理,处理推送结果,以及一些其他逻辑

          极光推送:实现极光的代理(就是极光对系统代理进行了封装),推送结果先走到系统方法中,极光取出来处理到自己的代理方法中,所以我们用极光代理就如同用系统代理,没差。(SDK实现想想就是简简单单)

    下面说一下源生(极光的自己去官网看文档):

    1. 注册推送逻辑
      /**
       注册推送逻辑  ,代码内部分iOS 10 以上 10-8 ,8 以下(项目适配到8,然后就注释掉了)
       */
      -(void)registerNoticaiton{
          
          if (@available(iOS 10 , *)) {
              UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
              [center setDelegate:(AppDelegate*)self];
      
              [center requestAuthorizationWithOptions:UNAuthorizationOptionSound|UNAuthorizationOptionAlert|UNAuthorizationOptionBadge completionHandler:^(BOOL granted, NSError * _Nullable error) {
                  if (granted) {
                      //注册成功
                      
                      NSLog(@"注册成功");
                  }
                  else{
                      //注册失败
                      
                      NSLog(@"注册失败");
                  }
              }];
          }
          else if (@available(iOS 8.0,*)){
              UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge categories:nil];
              
              [[UIApplication sharedApplication]registerUserNotificationSettings:setting];
          }
      //    else{//ios 8 以下
      //        [[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound];
      //
      //    }
          //注册获得 device token
          [[UIApplication sharedApplication]registerForRemoteNotifications];
          
      }

       

    2. 获取device token,需要把符号去掉,取出一串字符串
      #pragma mark  - 获取device token
      -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
          //获取devicetoken ,这里发送给后台,后台拿token ,证书 和 推送消息去请求 APNs服务器
          NSString *deviceTokenStr = [[[[deviceToken description]
                                        
                                        stringByReplacingOccurrencesOfString:@"<" withString:@""]
                                       
                                       stringByReplacingOccurrencesOfString:@">" withString:@""]
                                      
                                      stringByReplacingOccurrencesOfString:@" " withString:@""];
          
          NSLog(@"deviceTokenStr:\n%@",deviceTokenStr);
          
      }
      
      -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
          //获取device token 失败报错
          NSLog(@"获取deviceTokenError:%@",error);
      }

       

    3. 实现代理方法,需要引入头文件,遵循代理,代理对象为APPdelegate,在注册推送逻辑那块写过了,iOS10以下不用遵守代理,直接系统回调方法。

    
    #pragma mark - 处理接收到的推送消息  ios 10.0 以上
    
    /*
     处理是否通知用户,前台状态也能收到
     */
    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler  __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0)
    {
        NSDictionary *info = notification.request.content.userInfo;
        NSLog(@"--------%@",info);
        // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置
        if([UIApplication sharedApplication].applicationState == UIApplicationStateActive){//前台,当在前台的时候,推送走这里
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"推送消息" message:info[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
            [alert show];
            [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
            completionHandler(UNNotificationPresentationOptionBadge);
        }else{//后台和杀死状态
            
        completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionSound);
        }
    }
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        //handle code here...
        NSLog(@"回到前台");//这里还要做详细的处理逻辑, 当从桌面点击打开应用的时候,走这里
        if([UIApplication sharedApplication].applicationIconBadgeNumber>0){
            [UIApplication sharedApplication].applicationIconBadgeNumber -= 1 ;
        }
        
    }
    /*
     客户端收到消息,处理跳转等 ,当从通知栏点击进入的时候
     */
    -(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0)
    {
        NSDictionary *info = response.notification.request.content.userInfo;
        NSLog(@"info:%@",info[@"aps"]);
        
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:info[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
        [alert show];
    //    if([UIApplication sharedApplication].applicationIconBadgeNumber>0){
    //        [UIApplication sharedApplication].applicationIconBadgeNumber -= 1 ;
    //    }
        completionHandler();
    }
    
    #pragma mark - 处理接收到的推送消息  ios 10.0 以下
    
    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
        
        NSLog(@"didReceiveRemoteNotification:%@",userInfo);
        //处理应用在前台,后台,和死亡状态下
        if (application.applicationState == UIApplicationStateActive) {//用户前台
            
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"推送消息" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
            [alert show];
            [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
        }else{//用户后台和杀死状态下
            //点击推送消息,处理时间
            
        }
        completionHandler(UIBackgroundFetchResultNewData);
    }
    

    PS:实在不想写啥了,代码里面是自己的测试简单逻辑,没在自己公司服务器上测,公司后台忙着开发接口,用的网上别人写的测试工具,就是MAC上的一个小程序,自己写也可以(问题是要有服务器)。还有好多配置别忘了,推送开关 ,后台状态等等。敢敢单单

    下班:

    展开全文
  • iOS集成个推推送

    千次阅读 2017-07-03 11:54:31
    首先一下个推官网提供的推送流程图,刚开始可能有点复杂,不过要紧,等推送集成成功后再来,就简单了。 接下来是推送证书的创建以及个推SDK的集成 1.进入苹果开发者中心,选择证书选项 (1)创建

    前段时间由于项目需要,要使用个推进行推送,由于以前主要接触的是极光推送,所以集成过程中出现了很多问题,以防以后再次出现同样的问题,特意记录一下,也希望能帮到需要的人。

    首先看一下个推官网提供的推送流程图,刚开始看可能有点复杂,不过不要紧,等推送集成成功后再来看,就简单多了。



    接下来是推送证书的创建以及个推SDK的集成

    1.进入苹果开发者中心,选择证书选项


    (1)创建推送证书之前必须创建一个APPID,因为推送证书是和APPID绑定在一起的




    (2)这样APPID就创建好了,接下来就需要创建推送证书





    选择APPID



    这里需要上传CSR文件,网页不要关闭,回到桌面,打开电脑中的钥匙串,从颁发机构申请证书并保存到本地磁盘




    这样CSR文件就创建好了,重新回到苹果开发中心,继续推送证书的创建,选择保存到本地的CSR文件



    到这里推送证书就创建完成了,在本地中找到下载的推送证书并双击添加到钥匙串中,然后打开钥匙串找到创建好的推送证书,右击导出p12文件,并输入证书密码,以备后面使用


    到这里推送证书以及苹果开发中心的任务就完成了

    2.来到个推开放平台,登录进去创建新应用



    这样个推上面就就登记好应用了,我们可以看到应用的配置信息,有些是需要在集成中用到的


    3.接下来就需要在xcode进行集成了

    这里直接按照个推官网的文档直接接入就可以了 xcode集成文档,其中4.5(不包括4.5)以前以及5.1和5.2基本都需要完成,其他功能根据需要实现。

    5.1透传消息,当程序正在前台运行时,如果此时有发送通知,程序会收到通知消息。

    5.2静默推送,当程序退出或在后台运行时,可以通过此功能接收通知消息,如果同时集成了透传功能,打开APP时会再次接收到通知内容。

    4.注意事项

    特别需要注意的是证书的环境

    如果推送证书是开发环境,只要xcode中的bundleID 和team选择没错,直接运行到手机上就可以测试通知了。

    如果推送证书是生产环境,除了bundleID 和team选择正确外,还需要把程序进行打包后安装到手机上,这样才是生产环境,通过xcode直接运行到手机上是开发环境,本人就是因为这个一直测试失败,记忆深刻!!!

    展开全文
  • 但是对于私有仓库来说就不能直接同步了,只能手动配置远程库,然后手动推送。下面简单写一下 Git 设置和推送个远程库的方法。添加远程库Github 添加远程库可以 Git 简易使用指南 。添加码云的远程库和 Github ...

    之前一直在用 Github,最近注册了 码云,我准备把 Github 上的代码也上传一份到码云。码云有一个功能,可以直接同步 Github 的公开仓库,还是比较方便的。但是对于私有仓库来说就不能直接同步了,只能手动配置远程库,然后手动推送。下面简单写一下 Git 设置和推送到多个远程库的方法。

    添加远程库

    Github 添加远程库可以看 Git 简易使用指南 。

    添加码云的远程库和 Github 的差不多,打开你的项目仓库,如果仓库里没有文件的话直接就能看到远程库的地址,如果有文件的话点击 克隆/下载 复制地址:

    接下来就是在项目的 Git 中关联码云的远程库,输入:git remote add gitee 仓库地址

    其中 gitee 是远程库的别名,仓库地址 就是在仓库页面复制的以 .git 结尾的仓库地址。

    添加完成后可以使用:git remote

    查看已关联的远程仓库。

    也可以输入:git remote -v

    查看仓库名和仓库地址,如下:gitee https://gitee.com/changbin1997/MWordStar.git (fetch)

    gitee https://gitee.com/changbin1997/MWordStar.git (push)

    origin https://github.com/changbin1997/MWordStar.git (fetch)

    origin https://github.com/changbin1997/MWordStar.git (push)

    其中 origin 是 Github 仓库的别名,gitee 就是码云仓库的别名。

    推送

    推送的命令是:git push 远程库名 分支

    如果我要推送到 Github 的 master 分支就可以输入:git push origin master

    其中 origin 就是 Github 仓库的别名。

    推送到码云的 master 分支就可以输入:git push gitee master

    如果是第一次推送的话是需要输入账号和密码的。

    相关文章:本文为原创文章,版权归

    Mr. Ma's Blog

    所有,转载请联系博主获得授权。

    如对本文有问题或疑问都可以在评论区留言,我看到后会尽量解答。

    展开全文
  • 这几天做项目,需要一个消息提醒功能,决定用dwr实现,在dwr官网和网上找了很资料,也没实现精准推送,大多数的例子具体步骤写的清楚,怎么了解dwr的人了也未必能看懂,反正我是没懂,那时就决定,若自己...
  • dwr 精准推送

    2015-11-10 10:54:26
    这几天做项目,需要一个消息提醒功能,决定用dwr实现,在dwr官网和网上找了很资料,也没实现精准推送,大多数的例子具体步骤写的清楚,怎么了解dwr的人了也未必能看懂,反正我是没懂,那时就决定,若自己...
  • 极光推送demo(绝对不是官方的demo)

    热门讨论 2015-09-19 18:01:58
    绝对不是官方自动生成的demo,要说唯一的相同点,就是设置免打扰时段是直接复制过来的,之前被极光折磨时,也找了很demo子看看,...我的这个demo不能好,但至少不是官方demo并且界面做的还算可以,至少我自己这样认为
  • 每个程序猿(媛)都有过很使用第三方插件或第三方服务的经历,我觉得最让人头疼的事是不能快速将它提供的服务快速运用到自己的代码中,一直沉浸在别人的口水文档中。最近在关于实时消息推送方面的技术文章,然后...
  • 服务器推送技术解析

    2018-03-19 15:44:53
    服务器推送技术 最近几天,一直在研究服务器推技术,在网上了很资料,也下载了很小例子,总体来说,...这种方式并不能满足很现实应用的需求,譬如: 监控系统:后台硬件热插拔、LED、温度、电...
  • iOS 环信离线推送

    2019-09-24 17:26:58
    这几天项目里又用到了友盟的推送,虽然之前做过,但是很久做还是有很细节没有注意到,所以还是决定从头开始做一遍,把每一个环节都详细记录下来,同样的把每一个坑也记录下来.方便自己以后做的时候忘记哪个流程了可以...
  • iOS8下的远程推送

    2019-09-28 12:00:33
    昨天做了一下远程推送,今天写下来,分享给需要的人。参考了很篇文章,或许是iOS8的改动,没有一篇...顾名思义,推送,是指服务器向客户端发送消息,那么在iOS中,应用是被后台挂起的,并不能一直连接网络,那么...
  • 友盟推送遇到的坑

    2017-07-14 11:58:52
    昨天公产品测出来手机不能收到推送了 ,我测试了一下发现没有问题,测了几下发现有些手机拿不到deviceToken 关键是那些拿不到的手机,以前还是能拿到的,代码也没改过,顿时一脸懵逼 然后就去官网查,官网说什么...
  • DWR 3.消息推送

    2014-10-22 15:38:59
    这几天做项目,需要一个消息提醒功能,决定用dwr实现,在dwr官网和网上找了很资料,也没实现精准推送,大多数的例子具体步骤写的清楚,怎么了解dwr的人了也未必能看懂,反正我是没懂,那时就决定,若自己...
  • 服务器推送技术

    千次阅读 2013-03-20 11:11:08
    最近几天,一直在研究服务器技术,在网上了很资料,也下载了很小例子,总体来说,学到了一些东西,有些心得分享下:    传统模式的 Web 系统以客户端发出请求、服务器端响应的方式工作。这种方式并不能...
  • Python实现微博热搜推送

    千次阅读 2018-01-18 19:45:26
    当然不能论文啊,也要放松一下啊(说实话,纯英文的文章很枯燥)。然后就想到把微博热搜也顺便推送到我的邮箱里面,好了废话不说了,代码敲起()二. 抓取微博热搜首页 进入热搜首页,只有10条阅读量最高的...
  • 那一篇推送,是做给零基础或者基础很低的同学看的,所以说,为了想办法让他们看懂,我也费了一些心力(估计大多数人还是看不懂)。加上其他内容总共3000字,让人看完都费劲吧。不过只要没误人子弟,问题就不大。 ...
  • Web服务器推送方式择优问题

    千次阅读 2013-11-22 17:21:53
    最近几天,一直在研究服务器推技术,在网上了很资料,主要需求是我们客户端需要服务器即时推送消息过来。 传统模式的 Web 系统以客户端发出请求、服务器端响应的方式工作。这种方式并不能满足很现实应用的...
  • 捡九是大好的捡漏时机你不知道那些优秀的同学们手中到底握着多少名校...并且,这个阶段的申请门槛会更低,教育部的规定是所有具备接收免生的学校都可以申请,没有所谓的门槛(当然,最终能不能复试还是要目...
  • 这几天项目里又用到了环信的推送,虽然之前做过,但是很久做还是有很细节没有注意到,所以还是决定从头开始做一遍,把每一个环节都详细记录下来,同样的把每一个坑也记录下来.方便自己以后做的时候忘记哪个流程了可以...
  • 极光推送(2)

    2016-12-06 16:27:01
    结果发现和demo差不多,当时立马就懵了,不多说,说了都是泪。还是说说怎么拿到通知的内容吧。 这个其实很简单,你如果仔细极光的文档,一定发现 有这个JPushInterface.EXTRA_EXTRA, 这个接口就是获得极光...
  • 这几天做项目,需要一个消息提醒功能,决定用dwr实现,在dwr官网和网上找了很资料,也没实现精准推送,大多数的例子具体步骤写的清楚,怎么了解dwr的人了也未必能看懂,反正我是没懂,那时就决定,若自己...
  • 之前有用户问小编,怎样才能在没有U盘的情况下,把自己电脑上的视频放到家里的智能电视上播放?他说用U盘太麻烦,而且经常都找到在哪,也想下载其他投屏软件,说手机里一堆软件,哈哈哈~好的...电脑推送视频或...
  • 这几天做项目,需要一个消息提醒功能,决定用dwr实现,在dwr官网和网上找了很资料,也没实现精准推送,大多数的例子具体步骤写的清楚,怎么了解dwr的人了也未必能看懂,反正我是没懂,那时就决定,若自己...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 287
精华内容 114
关键字:

多看不能推送了