Other articles


  1. iOS创建颜色的一个简单方法

    Objective-C里面通过RGB值的方式创建一个UIColor的对象很简单,只需要传递给指定的RGB值就可以了:

    + (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
    

    不过这个方法有一个问题,就是这里面的RGB值是用0~1.0的浮点值来表示的,对于常用的0~255的表示方式以及类似FFFFFF的十六进制表示方式并没有对应的方法。我比较喜欢通过Category的方式扩展UIColor,只需要在工程里面添加一个类就行了:

    UIColor+CreateMethods.h
    
    //
    //  UIColor+CreateMethods.h
    //
    
    #import <UIKit/UIKit.h>
    
    @interface UIColor (CreateMethods)
    
    // wrapper for [UIColor colorWithRed:green:blue:alpha:]
    // values must be in range 0 - 255 …
    read more

    There are comments.

  2. iOS推送机制的隐患

    最近在研究iOS的推送系统,虽然配置起来稍微麻烦了一些,但是实现的原理并不复杂。简单来讲,就是通过app向APNS(Apple Push Notification Service)发送一个注册的请求,等到APNS同意之后便会发回设备的ID。在这个过程中,用户是可以一开始就选择是否接受推送通知的,如果用户不同意接收推送通知的话那么APNS也会收到用户的选择而不再发送推送通知,直到用户修改设置里面的选项。

    现在的一个问题就在于,推送通知在app没有打开的情况(或者打开以后进入后台)下,是iOS系统自己处理的。这就造成什么问题呢?应用在没有使用的情况下,是没有办法处理接收到的推送通知的。比如说一个新闻客户端,如果想在收到推送通知的时候弹出提示框显示最新的新闻,这是无法办到的,除非用户在设置里面将推送的显示修改成提示框形式。这样有一个好处就是,应用程序无需关注程序没有打开情况下对推送的信息的处理,同时也节省了系统的资源,不需要每一个程序都监视推送信息的接收。

    直到现在都一切正常,没有什么大问题。但是最近突然发现了一个很致命的安全隐患,就是假如用户卸载了app并且重新安装回去,即使用户不打开app也能收到之前用户的推送信息。这代表什么呢?假使用户卸载了应用程序但是没有删除用户信息,那么接下来的用户如果安装了同一个应用并且并没有登录进应用程序,那么他照样可以收到之前用户的推送信息。这是什么原因呢?iOS在卸载用户程序的时候不会告诉给应用程序提供者,因此假如该用户没有在新的设备上登录的话,那么应用程序提供者将会继续发送该用户的推送信息给该设备。当设备重新安装上app的时候,就会接收到之前用户的推送信息,只要这位用户还没有登录自己的账号 …

    read more

    There are comments.

links

social