iospush开发,高级ios开发

iOS实现先无动画pop再push,替换当前控制器

iOS实现先无动画pop再push,替换当前控制器

定制网站建设可以根据自己的需求进行定制,网站设计、做网站构思过程中功能建设理应排到主要部位公司网站设计、做网站的运用实际效果公司网站制作网站建立与制做的实际意义

1.先pop 发送通知或代理在前一个页面执行push操作

iOS开发中会遇到添加成功,发送成功……类似情况,需要先将push前的页面移除调。如果直接调用pop,立刻去push。如果这两个命令写在同一个控制器中,则会发现push根本没有被执行……因为pop已经将该控制器移除,push根本没有机会执行。也可以在上一个控制器通过代理/通知/闭包等操作。

这种方法有弊端,有可能会push多次不等。页面交互非常不好。

2.改变控制器在栈中的位置

所以就选择了下面的方法,先移除路由栈中当前控制器,再新增新的控制器,最后赋值。

iOS开发中push方式被什么取代

IOS开发中PUSH通过开发者push证书实现的,要实现通知推送只能使用push,无其他代替方法。

PUSH原理及实现方法:

原理图:

注:

Provider :应用自己的服务器;

APNS :Apple Push Notification Service的简称,苹果的PUSH服务器;

实现方法:

一、生成push证书。

1、用付费帐号登录到IOS开发者中心。

2、生成开发证书,生成开发证书过程中需要通过Keychain生成一个CSR文件,默认名为CertificateSigningRequest.certSigningRequest,这个文件将在生成push证书的时候用到。

二、创建一个App ID。

注:要用push功能的Bundle Identifier一定不能出现通配符,比如com.mycompany.* ,这样的名字是不能使用push的。

创建过程中Description可以任意填写,比如叫 push_demo ;

Bundle Identifier一般用 com.company.appname 这样的格式,例如com.mycompany.demo ;

三、生成Push SSL Certificate。

1、打开 Enable for Apple Push Notification service 选项,该选项下有 Development Push SSL Certificate 和 Production Push SSL Certificate 两个SSL Certificate可以配置,前面一个是用来的开发的push证书,后面一个是用来发布的。我们以开发push证书为例,点击 Development Push SSL Certificate - Configure ,后面会要求选择CSR文件,这就是生成开发证书时的CertificateSigningRequest.certSigningRequest文件,选择好CSR后就生成好相应的SSL Certificate了。下载下来,保存名为 aps_developer.cer 。

2、从Keychain中导出私钥、设置好密码,命名为private_key.p12。

3、生成push证书。

将aps_developer.cer转成pem格式

openssl x509 -in aps_developer.cer -inform DER -out aps_developer.pem -outform PEM

将private_key.p12格式的私钥转换成private_key.pem

openssl pkcs12 -nocerts -out private_key.pem -in private_key.p12

4、这一步会要求输入p12私钥的密码,以及设置新生成的pem的密码。

5、创建用于服务端的SSL p12格式证书,命名为aps_developer.p12

openssl pkcs12 -export -in aps_developer.pem -inkey private_key.pem -certfile CertificateSigningRequest.certSigningRequest -name "aps_developer" -out aps_developer.p12

6、这一步会要求输入private_key.pem的密码,注意不是private_key.p12的密码。如果密码错误,或者CertificateSigningRequest.certSigningRequest文件不匹配都不能正常生成aps_developer.p12文件,如果生成的aps_developer.p12文件大小是0,说明生成过程中出了问题,请检查pem私钥、密码、以及CertificateSigningRequest.certSigningRequest是否正确。

aps_developer.p12就是Provider向APNS发送push消息需要的SSL证书。把这个证书和密码提供给服务端,服务端就可以发送push消息给APNS了。这时服务端已经可以工作了,但客户端还必须配置相应的Provisioning Profile才能启动应用的push功能。

服务器配置需注意的是,由于我们生成的是开发环境的push证书,所以服务器应该连接APNS的sandbox环境地址:gateway.sandbox.push.apple.com:2195 ,如果应用正式发布,就要连接正式环境,必须生成相应的发布证书,并连接APNS正式环境地址:gateway.push.apple.com:2195 。

CertificateSigningRequest.certSigningRequest

private_key.p12

aps_developer.cer

四、生成Provisioning Profile

1、新建Profile,命名为push_dev;

2、选择相应证书;

3、App ID选择push_demo;

4、选择设备;

5、下载并安装该Profile供开发使用;

6、Xcode证书设置、Info.plist设置

用Xcode打开客户端工程,设置Info.plist的Bundle identifier为com.mycompany.demo 。

打开工程设置,必须将证书设置为与push_dev关联的证书。

7、客户端获取deviceToken

服务端要发送push消息给某一设备还必须知道该设备的deviceToken。应用运行后获取到deviceToken,然后上传给服务器,下面介绍应用如何获取deviceToken。应用必须先注册使用push功能。

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

 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];

 // do something

 // ...

}

在AppDelegate中添加下面方法来获取deviceToken:

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

 NSString *token = [NSString stringWithFormat:@"%@", deviceToken];

 NSLog(@"%@", token);

}

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

 NSLog(@"%@", error);

}

应用获取到deviceToken后,上传给Provider,Provider就可以用这个deviceToken给这个设备push消息了。

iOS开发 导航栏出现多次push同一个页面问题解决办法

在点击push下一个页面时,因为各种原因,点一下cell或按钮没有响应,用户可能就多点几下,这时候会打开好几个一样的页面。

这是因为push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面正好在reloadData卡住主线程。造成点击cell时卡住了。

这时,我们可以通过重写导航控制器的方法来解决这个问题。

#import UIKit/UIKit.h

@interfaceNaviViewController : UINavigationController

@end

#import "NaviViewController.h"

@interfaceNaviViewController ()

// 记录push标志

@property(nonatomic,getter=isPushing)BOOLpushing;

@end

@implementationNaviViewController

- (void)viewDidLoad {

      [superviewDidLoad];

       self.delegate=self;

}

- (void)pushViewController:(UIViewController*)viewControlleranimated:(BOOL)animated {

    if(self.pushing==YES) {

             NSLog(@"被拦截");

             return;

    }else{

             NSLog(@"push");

             self.pushing=YES;

    }

[superpushViewController:viewControlleranimated:animated];

}

#pragma mark - UINavigationControllerDelegate

-(void)navigationController:(UINavigationController*)navigationControllerdidShowViewController:(UIViewController*)viewControlleranimated:(BOOL)animated {

         self.pushing=NO;

}

@end

iOS 转场动画:以Push方式实现Present跳转

在iOS开发中,页面跳转一般有两种方式:

在SDK开发中,由于需要减小侵入性,通常会使用modal方式弹出SDK的页面,那么默认唤起的动画就是从下到上。现在有一个需求,需要从右到左唤起SDK的页面,所以我们需要用到转场动画,将present的动画改成从右到左,也就是以Push方式实现Present跳转。

实现模态的转场动画的步骤,大概分以下几步:

下面按照这个步骤来实现功能

创建一个类 WBHCPushAnimatedTransition 来封装转场动画

实现系统的 UIViewControllerAnimatedTransitioning 协议

实现present动画,实际就是使用UIView动画来改变 fromVC 和 toVC 的 view 的位置

实现dismiss动画,和上面的present动画相反,将fromVC 和 toVC 的 view 的位置还原

这样,整个转场动画的封装就完成了,下面来实现代理

在要present出来的vc中实现系统代理 UIViewControllerTransitioningDelegate

这样的话,整个功能就基本实现了

但是,体验上还缺少一点:没有侧滑返回。所以,接下来,我们实现侧滑返回的交互转场

创建一个继承自 UIPercentDrivenInteractiveTransition 的类 WBHCPopInteractiveTransition 来封装交互转场

为传入的vc添加拖动手势

拖动手势是加在全屏上的,我们需要将它限制到屏幕左侧,这样才是侧滑返回,否则是全屏返回

核心是处理手势交互转场的过程,我们需要更新转场百分比 updateInteractiveTransition ,标记 完成转场 finishInteractiveTransition 和取消转场 cancelInteractiveTransition

这样,整个交互转场的封装就完成了,下面来实现代理

在要dismiss消失的vc中实现系统代理 UIViewControllerTransitioningDelegate

这样的话,整个侧滑返回的功能就实现了

至此,我们基本上就实现了以Push方式实现Present跳转,同时可以像原生导航一样进行侧滑返回

iOS推送—用Adhoc模式在生产环境中测试Push Notifications功能(转)

由于我现在开发的应用比较依赖消息推送。但在生产环境中(production)来测试消息推送比较麻烦.大部分人认为只能在app发布之后,才能验证生产环境下的消息推送。其实是不对的这篇文章,是解决如何在不提交app应用的情况下,使用ad-hoc模式来验证消息推送(push notifications).

1.png

把codeSign 设置我就忽略了接着,进入XCode-Product-Scheme-Edit Scheme。修改Build Configuration为Release

2.png

然后进行打包 savefor adhoc ipa然后。通过itunes装到有权限的设备上就可以验证生产证书的推送。


本文题目:iospush开发,高级ios开发
文章出自:http://azwzsj.com/article/dsgodec.html