Swift JPush极光推送通知和自定义消息

来源:未知作者:编程 日期:2020/03/02 06:06 浏览:

1、登陆cookie存取难点日常大家登陆都是用token做网络通讯令牌,可是大家依旧接收cookie登入和获取数据等休戚相关操作,可是此中有个小标题,便是切换账号的时候,cookie为何要清掉呢?固然大家用事情发生此前的客商的cookie和新顾客的账号、密码进行登陆的话,服务器会接到,可是回到数据有误,原因是:大家在首先次号令服务器的时候,服务器会把cookie放在head消息再次来到给我们,字段为"Set-库克ie",大家接到之后对它进行仓库储存,第叁次倡议,服务器照旧会把cookie放在head新闻再次来到给大家,字段为"Cookie",也正是说,cookie大家只必要设置叁回,之后的互联网诉求都没有要求再安装了,回到我们刚刚的标题,倘使大家切换账号的时候,不淹没cookie的话,服务器的归来字段为"库克ie",相当于早已设置了,可是是事前客户的,所以服务器重返的数量会错误。2、极光推送在应用程式退出之后应该做如何吗?平日大家在脱离登陆的时候,都会去掉极光的tag和小名,(不通晓如何是tag和别称的去极光的官方网站看看),为的正是在脱离登入之后,不会选择该客商的相关推送,不过,大家在实战的时候开采,退出的时候,不时候照旧会接收推送,上面正是本身当下的消除方式,大神们有好的消除方案,麻烦想告诉,多谢!消弭极光的tag和小名用的是JPushInterface.setAliasAndTags(SettingActivity.this, "", tagList, new TagAliasCallback() {}此中第多少个参数为近些日子目的,第贰个为别称,第七个为tag,,第多个是回调,就算回调成功大家才做一些清监护人业,如解除Activity等Set<String> tagList = new HashSet<>(); JPushInterface.setAliasAndTags(SettingActivity.this, "", tagList, new TagAliasCallback() { @Override public void gotResult(int responseCode, String arg1, Set<String> set) { if (responseCode == 0) { customProgressDialog.dismiss(); JPushInterface.clearAllNotifications(SettingActivity.this);//清掉极光通知栏信息 SPUtil.clear();//退出清除所有缓存 finishActivities(); //清除所有Activity } else { customProgressDialog.dismiss(); UIUtils.showToastSafe("当前网络信号差,请重试"); } }});3、APP肃清缓存的功用将来广大应用软件会把图片、数据、录像等数码缓存到地点,一时候我们须求给客商接受性的消弭,我用的是定期发送通告去检查评定要去掉的文书的大小,假使为0K,表达为曾经清理停止,下边便是作者实战的资历://点击清除按钮,弹个对话框 mCustomProgressDialog.show(); //开始清除 DataCleanManager.clearAllCache(SettingActivity.this); //定时发通知 mHandler.postDelayed(sRunnable, 200); ....................``private final Runnable sRunnable = new Runnable() { @Override public void run() { //检测文件大小 getSizeOfFlie(); }}; public void getSizeOfFlie() { try { //判断文件大小是否等于0K if (DataCleanManager.getTotalCacheSize(SettingActivity.this).equals { mCustomProgressDialog.dismiss(); UIUtils.showToastSafe; mHandler.removeCallbacks(sRunnable); } else { mHandler.postDelayed(sRunnable, 200); } } catch (Exception e) { e.printStackTrace(); }}解除缓存工具类地址:

背景

自身所在的小卖部是一家守旧网络+教育公司,推送业务是从二零一八年开头的,前后也经验了往往迭代,未有大牌,也尚无结构师来两全,一路踩坑,一路填坑。我们阅世了大早晨给客户直接重复推送的严重事故,也可能有上线后客商收不到推送的窘迫,明天就从一个测量试验的角度来聊聊推送公告,因为鄙人只担负IOS端的业务,所举的例证多以IOS为主。

在始发早前,首先理解下自定义新闻和文告的几点分别。

推送结构

服务器后端——第三方推送SDK——应用程式,画了四个简约的流程图如下:

图片 1

Swift JPush极光推送通知和自定义消息。忽略就是应用软件运维后,去第三方倡议注册(近年来落到实处安卓用的是信鸽,IOS用的是极光),第三方重回注册id(Device token)即设备小名给APP,应用程式将顾客id和Device token提交到服务器,服务器将其积累到数据库,发推送时若是将在发送的客户或设施音信和待发的数码参数发送给第三有助于可达成推送。

自定义务消防队息和布告的分别

  • 选拔推送自定义音讯时推送文告栏不显得
  • 自定义新闻推送不经过APNS,所以说跟推送证书没有提到
  • 只有app在前台时手艺吸收接纳自定义新闻,未运转或许运行但地处后台时抽出不到(解决了不想在app未运维时收到推送音信的难点卡塔尔国

注册

先来讲说第一步注册,APP向第三方呼吁注册,几时乞请,登入?应用软件运行?注册战败后该怎么管理,是还是不是有重试机制,重试机制重试多少次啊,是或不是会有死循环?

有关Devicetoken,IOS的官方文书档案是那般描述的:

If the user restores backup data to a new device or computer, or reinstalls the operating system, the device token changes

An application should register every time it launches and give its provider the current token

粗粗是说,当进行备份复苏、或恢复生机出厂设置之类的操作时,Device token会爆发转移,提议 APP 在历次运营时都获得Device token,有博客上说删除手提式有线电话机上的 APP 之后,再度下载安装,Device token会改造,作者自个儿试了弹指间,IOS7卸载重装Device token不会变动,IOS10卸载重装后Device token产生了改观,后来笔者在那篇博客上找到了答案,同一设备上应用软件的Device token确实会生出更改,只是旧的Device token是船到江心补漏迟的。就算如此,仍必要将洋气的Device token传递个服务器,这篇博客上也提供领会决方案。

平淡无奇,叁个顾客是足以绑定四个设备即Device token,那也给客商多终端同期登陆推送布告提供了恐怕。如若五个账号在多台道具登入,钦赐小名下发文告,理论上多台设备都得以吸取推送。而客户退出登入后,怎么保险不再选拔推送,供给思索在脱离登入去注销绑定。假诺是跳过退出登陆这一步,对应的绑定关系仍在,举个例子说卸载后再重装,怎样去消除账号与设施绑定就需求重新考虑了。同一设备上器械别称常常状态下都不会变动,意味着一台设备也许绑定两个外号,就只怕存在该装置已经报到另几个账号,但仍然为能够吸收推送,所以最保险的章程依旧在抽离登入时,清除账号与设施的绑定。

因而在测验在此以前澄清注册的机制和服务端如何去存款和储蓄客户和设施的绑定关系,尤为关键。

SDK初始化

Appdelegate文件

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // 极光推送
        if (UIDevice.current.systemVersion as NSString).floatValue >= 10.0  {

            if #available(iOS 10.0, *) {
                let entity = JPUSHRegisterEntity()
                entity.types = NSInteger(UNAuthorizationOptions.alert.rawValue | UNAuthorizationOptions.badge.rawValue | UNAuthorizationOptions.sound.rawValue)
                _ = JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self)
            } else {
                // Fallback on earlier versions
            }

        } else if  (UIDevice.current.systemVersion as NSString).floatValue >= 8.0 {
            //可以添加自定义categories
            JPUSHService.register(forRemoteNotificationTypes: UIUserNotificationType.badge.rawValue | UIUserNotificationType.sound.rawValue | UIUserNotificationType.alert.rawValue, categories: nil)
        } else {
            //categories 必须为nil
            JPUSHService.register(forRemoteNotificationTypes: UIUserNotificationType.badge.rawValue | UIUserNotificationType.sound.rawValue | UIUserNotificationType.alert.rawValue, categories: nil)
        }

        var isJpushProduction: Bool
        #if DEBUG
            isJpushProduction = false
        #else
            isJpushProduction = true
        #endif

        JPUSHService.setup(withOption: launchOptions, appKey: JPUSHService_appKey, channel: "Publish channel", apsForProduction: isJpushProduction, advertisingIdentifier: nil)

        return true
    }
  • 上一篇:没有了
  • 下一篇:没有了