app版本更新的四种实现方式

版本更新大致分为四大类:app负责单版本检测测与更新(自己实现版本更新),通过苹果商店的自动更新机制进行自动更新和通过第三方平台实现版本检测与更新(如:友盟的版本检测与更新),app和服务器联合实现多版本检测测与更新(自己实现版本更新)方案。 
通过苹果商店的自动更新机制进行自动更新是,应用更新时,手机会收到苹果商店的通知,并启动应用程序的自动更新下载应用并更新。但是可能出现手机收不到版本更新通知(由手机系统自己实现,并非弹出用户可见的push提示语)的情况和部分应用更新失败的情况,若你没有 Apple ID那么你也使用不了这类官方更新了。最麻烦的是用户一般都关闭了应用的自动更新和大批量自动更新时必然有部分失败,并且失败了就不会再自动更新成功,大都不希望在外面的移动蜂窝网络下自动更新大量应用,那样你流量会嗖嗖的莫名向上涨。 
看来是自己的应用自己对自己负责更靠谱。版本更新一般分两类:强制更新和非强制性更新。当然强制更新是你不更新就不能用了,所以虽然霸道,但是也没有办法,通常是业务逻辑的大变更才会出现。非强制更新一般是不更新也能用,但是可能不更新部分功能你用不了或看不到,一般给你提供去苹果商店更新还是继续使用的选择。当然这种强制更新本质是有服务器来判断,需要拿当前版本号(服务器数据库中存储的应用版本号)和应用发送的版本号(存储在服务器与应用之间的相关会话中)相比较。当然服务器中的应用版本号在更新时要保证只能增大不能减少,若服务器的版本号变更需要向所有应用发送版本更新push通知。由于苹果审核应用的时间不能完全确定,并且苹果不希望有超过他掌控的版本更新,他做的又太完美,只能忽悠他了,等你收到你的应用上架的邮件时再更新你服务中数据库对应应用版本号了。 
版本更新有四种实现: 
第一种实现和场景,称为登录时版本更新(包括强制更新和非强制更新),用户启动app登录或自动登录时,发送请求需要带本应用的当前版本号,服务返回的结果中包含版本更新信息,并且一般立刻弹出提示模态对话框让用户选择操作,当然强制更新只有去苹果商店一条路。模态对话框在点击后跳到苹果商店,由于跳转的过程中,应用被自动切换到后台,所以若是强制更新,从后台切换到前台时,由于以前的模态对话框由于点击消失还需要再弹出一个,非强制更新就不需要弹了该干啥就干啥去。 
判断强制,只需要看Version的字符串的第1个”.”前的字符串就可以,非强更新就看ersion的字符串的第1和第2”.”间的字符串,第3个”.”后的字符串都是不需要更新的子版本号。如:强制更新数字字符串.非强制更新数字字符串.普通子版本数字字符串.普通子版本数字字符串。7.3.2就是,7是强制更新版本号,3是非强制更新版本号,2是普通子版本号。原来的版本号比7小就是强制更新,原来的版本号比3小就是非强制更新,原来的版本号比7和3都一样其它后面的字符串比2小都不需要更新。所以想让你的APP具有强制更新和非强制更新,你的第一个版本就要支持这套机制,不然别人装了你的第一个最老的APP不更新,那么理论上都能用那个早期的逻辑,你后期的APP再支持这套更新机制也管不了最早期的版本。经过实际发布版本发现,苹果只允许发布含有2个’.‘或以下的版本号,不支持含有三个’.‘或以上的版本号。

第二种实现和场景,称为PUSH信息版本更新,属于运行时版本更新(通常只包括强制更新)的一种,当用户在使用时,应用有新版本上架(准确的说是服务器数据库中对应应用版本号更新),你的服务推送在线用户push消息(强制更新才发送,非强制更新不发这种强制更新push消息),当用户收到这个强制更新push消息,不弹出PUSH消息,而是默默的把它记录到记录到全局变量中,当然不能弹出模态提示框,那样可能中断用户正在进行的操作,很不友好,当用户操作某些核心业务事件(抢单,发单等)时才弹出强制更新。另外可以在从后台切换到前台时弹出,注意要考虑到操作了一半,有电话过来,去接电话了,若弹出强制更新你以前做的事情都泡汤了,所以这种情况就看你的选择了。 
第三种实现和场景,心跳版本检测,,属于运行时版本更新(通常只包括强制更新)的一种。若有的应用有心跳,当有版本更新是通过心跳的回调发送给客户端,客户端存在全局变量里,我们又不知道用户当前具体再做什么,所以最好别中断用户的当前操作,只有当用户点击重要业务逻辑(如:接单或发单)才弹出强制更新。 
第四种实现和场景,在应用的设置里增加版本检测与更新。这种方案已经在2015年3月20日把它放倒了。我们发布的app就是因为这被驳回过。苹果审核时不能有这样的功能。只所以拎出来说说是因为有部分以前发布的应用现在仍旧有这类更新。 
判断强制,只需要看Version的字符串的第1个”.”前的字符串就可以,非强更新就看ersion的字符串的第1和第2”.”间的字符串,第3个”.”后的字符串都是不需要更新的子版本号。如:强制更新数字字符串.非强制更新数字字符串.普通子版本数字字符串.普通子版本数字字符串。7.3.2.4就是,7是强制更新版本号,3是非强制更新版本号,2是普通子版本号,4普通二级子版本号。原来的版本号比7小就是强制更新,原来的版本号比3小就是非强制更新,原来的版本号比7和3都一样其它后面的字符串比2或4小都不需要更新。所以想让你的APP具有强制更新和非强制更新,你的第一个版本就要支持这套机制,不然别人装了你的第一个最老的APP不更新,那么理论上都能用那个早期的逻辑,你后期的APP再支持这套更新机制也管不了最早期的版本。

手机自动更新关闭,开启就不用再说了吧: 
在设置中,左边目录往下啦,看到一个itunes store和app store,选择点击; 
点击之后看到自动下载的项目:一、应用程序;二、更新;就是后台联网有更新的情况下自动下载应用程序和更新软件。 
我们只要把开关关闭,如果需要更新进入app store选择手动更新即可,这样就不会无缘无故耗费流量了。特别是iphone,有时无意识的开着3g或4g网络(有些区域没有高级基站,信号弱时会自动切换到2g网络),骚包的人从来没有关过蜂窝通信,我是小市民,一般关闭蜂窝通信,需要时再打开。注意苹果由于是个萌萌达,服务器不在大陆,经常批量自动更新有部分应用自动更新失败(我统计统计过,一次自动更新10个应用,通常至少2个应用是失败的), 并且若它失败了,以后永远不会再自动成功了,除非再有更新的版本或你把自动更新关闭再打开,它才给你重新把所有需要更新的应用自动更新一遍。 
这里写图片描述

登录时版本更新的部分代码如下:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">AppDelegate<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.mm</span>文件
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)applicationDidBecomeActive:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> *)application
{
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//    [HomeViewController checkNetWork];</span>
    FLDDLogDebug(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"g_versionState :%d, g_bVersionUpdatePrompt : %d"</span>, [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span>, [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_bVersionUpdatePrompt</span>);

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((NotReachable == [SelfUser currentSelfUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.networkStatus</span>) && (g_showNoNetNotice))
    {
        FLDDLogDebug(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"applicationDidBecomeActive : g_showNoNetNotice"</span>);
        [HomeViewController checkNetWork];
    }

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((VERSION_STATE_FORCE_UPDATE == [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span>) && (!([User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_bVersionUpdatePrompt</span>)) && ([User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> != <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>))
    {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"版本更新"</span> message:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"检测到最新版本,请及时更新"</span> delegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> cancelButtonTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"更新"</span> otherButtonTitles:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
        alert<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.tag</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@try</span>
        {
            [alert show];
            [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_bVersionUpdatePrompt</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@catch</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSException</span> *exception) {
        }

    }

}


- (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span>)application:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> *)application didFinishLaunchingWithOptions:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *)launchOptions {
        [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] addObserver:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> selector:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@selector</span>(updateVersionNotification:) name:UPDATE_VERSION_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
.
.
.
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)updateVersionNotification:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotification</span> *)notification
{
    [AppDelegate registerForRemoteNotification];

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((VERSION_STATE_FORCE_UPDATE == [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span>) && ([User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> != <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>))
    {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"版本更新"</span> message:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"检测到最新版本,请及时更新"</span> delegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> cancelButtonTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"更新"</span> otherButtonTitles:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>,<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
        alert<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.tag</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@try</span>
        {
            [alert show];
            [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_bVersionUpdatePrompt</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@catch</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSException</span> *exception) {
        }
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((VERSION_STATE_REMIND_UPDATE == [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span>) && ([User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> != <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>))
    {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"版本更新"</span> message:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"检测到最新版本,请及时更新"</span> delegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> cancelButtonTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"放弃"</span> otherButtonTitles:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"更新"</span>,<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
        alert<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.tag</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">101</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@try</span>
        {
            [alert show];
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@catch</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSException</span> *exception) {
        }
    }
}


-(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSInteger</span>)buttonIndex
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([alertView tag] == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100</span>)
    {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> (buttonIndex) {
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//YES应该做的事</span>
            {
                [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_bVersionUpdatePrompt</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">NO</span>;
                [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> sharedApplication] openURL:[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSURL</span> URLWithString:[User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span>]];
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
            }
        }
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([alertView tag] == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">101</span>)
    {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> (buttonIndex) {
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//NO应该做的事</span>
            {
                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//[User currentUser].g_bVersionUpdatePrompt = NO;</span>
                [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] postNotificationName:LOGIN_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
            }
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//YES应该做的事</span>
            {
                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//[User currentUser].g_bVersionUpdatePrompt = NO;</span>
                [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> sharedApplication] openURL:[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSURL</span> URLWithString:[User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span>]];
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
            }

        }
    }
}

HomeViewController<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.m</span>文件
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)autoLogin
{
    .
    .
    .
    [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] postNotificationName:UPDATE_VERSION_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
    .
    .
    .
}

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSInteger</span>)buttonIndex
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (alertView<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.tag</span> == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1010</span>)
    {
        _isAlertCherkNet = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">NO</span>;

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (_needSendNotice)
        {
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.isHaveNet</span>)
            {
                _needSendNotice = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">NO</span>;
                _isAlertCherkNet = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">NO</span>;
                [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] postNotificationName:UPDATE_VERSION_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
            }
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
            {
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(!_isAlertCherkNet && !_isAlertSrvFail)
                {
                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.alertView</span> = [[UIAlertView alloc] initWithTitle:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span> message:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"当前无网络,请打开网络"</span> delegate:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> cancelButtonTitle:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"确定"</span> otherButtonTitles:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.alertView</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.tag</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1010</span>;
                    _isAlertCherkNet = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>;
                    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.alertView</span>  show];
                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.alertView</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>;
                }
            }

        }
    }
}
LoginViewController<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.m</span>文件
-(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)btn{
    .
    .
    .
    [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] postNotificationName:UPDATE_VERSION_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
    .
    .
    .
}


User<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.m</span>文件
+ (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)loginWithParams:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *)params block:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> (^)(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> *, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSError</span> *))block
{
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> *muParams = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> dictionaryWithDictionary:params];

    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *version = [AppManager getVersion];
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *model = [AppManager getDeviceModel];
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *iOSVersion = [AppManager getIOSVersion];

    [muParams setObject:version forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"version"</span>];
    [muParams setObject:model forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"phoneType"</span>];
    [muParams setObject:iOSVersion forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"phoneSystem"</span>];
    [muParams setObject:g_loginCmd forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"cmdCode"</span>];

    [[API shareAPI] GET:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"loginWithFixedPasswordJsonPhone.htm"</span> params:muParams success:^(AFHTTPRequestOperation *operation, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> responseObject) {

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [[NSNotificationCenter defaultCenter] postNotificationName:REMOVE_LOCALNOTIFICATION_NOTIFICATION object:nil];//登录成功后,取消之前所有不是本用户的催单提醒</span>

        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *cookie = [operation<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.response</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.allHeaderFields</span> objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Set-Cookie"</span>];<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//保存Cookie(仅登录成功后保存)</span>
        [AppManager setUserDefaultsValue:cookie key:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"cookie"</span>];

        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *responseBody = [responseObject objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"body"</span>];
        .
        .
        .
        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.grabMessage</span> = [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"grabCityNotEqual"</span>] toString];

        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>;
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *hasNewVersion= [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"hasNewVersion"</span>] toString];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([hasNewVersion isEqualToString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0"</span>])
        {
            [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span> = VERSION_STATE_NO_UPDATE;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
        {
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *needUpgrade= [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"needUpgrade"</span>] toString];
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([needUpgrade isEqualToString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1"</span>])
            {
                [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span> = VERSION_STATE_FORCE_UPDATE;
            }
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
            {
                [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span> = VERSION_STATE_REMIND_UPDATE;
            }
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *downloadUrl= [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"downloadUrl"</span>] toString];
            [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> = downloadUrl;
        }

        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> *districts = [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"countyList"</span>] objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"rows"</span>];


        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableArray</span> *muArray = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableArray</span> array];

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *attribute in districts) {
            District *district = [[District alloc] initWithAttributes:attribute];
            [muArray addObject:district];
        }

        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.districts</span> = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> arrayWithArray:muArray];

        [[User currentUser] saveUserInfo];
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [AppManager addUserRemindNotification];</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [AppManager addCurrentOrderRemind];</span>


        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (block) {
            block([<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> arrayWithArray:muArray], <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>);
        }

    } failure:^(AFHTTPRequestOperation *operation, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSError</span> *error) {

        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.state</span> = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-1"</span>;

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (block) {
            block(@[], error);
        }
    }];

}

+ (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)reLoginWithParams:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *)params block:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> (^)(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> *, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSError</span> *))block
{
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> *muParams = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableDictionary</span> dictionaryWithDictionary:params];

    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *version = [AppManager getVersion];
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *model = [AppManager getDeviceModel];
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *iOSVersion = [AppManager getIOSVersion];

    [muParams setObject:version forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"version"</span>];
    [muParams setObject:model forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"phoneType"</span>];
    [muParams setObject:iOSVersion forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"phoneSystem"</span>];
    [muParams setObject:g_reloginCmd forKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"cmdCode"</span>];
    [AppManager setUserDefaultsValue:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span> key:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"cookie"</span>];

    [[API shareAPI] GET:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"reLoginWithFixedPasswordJsonPhone.htm"</span> params:muParams success:^(AFHTTPRequestOperation *operation, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span> responseObject) {

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [[NSNotificationCenter defaultCenter] postNotificationName:REMOVE_LOCALNOTIFICATION_NOTIFICATION object:nil];//登录成功后,取消之前所有不是本用户的催单提醒</span>

        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *cookie = [operation<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.response</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.allHeaderFields</span> objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Set-Cookie"</span>];<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//保存Cookie(仅登录成功后保存)</span>

        FLDDLogDebug(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"login cookie\n ----------\n%@\n------------\n"</span>, cookie);
        [AppManager setUserDefaultsValue:cookie key:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"cookie"</span>];

        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *responseBody = [responseObject objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"body"</span>];
        .
        .
        .
        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>;
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *hasNewVersion= [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"hasNewVersion"</span>] toString];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([hasNewVersion isEqualToString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0"</span>])
        {
            [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span> = VERSION_STATE_NO_UPDATE;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
        {
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *needUpgrade= [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"needUpgrade"</span>] toString];
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([needUpgrade isEqualToString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1"</span>])
            {
                [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span> = VERSION_STATE_FORCE_UPDATE;
            }
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
            {
                [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_versionState</span> = VERSION_STATE_REMIND_UPDATE;
            }
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *downloadUrl= [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"downloadUrl"</span>] toString];
            [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.g_newVersionURL</span> = downloadUrl;
        }

        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> *districts = [[responseBody objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"countyList"</span>] objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"rows"</span>];


        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableArray</span> *muArray = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSMutableArray</span> array];

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *attribute in districts) {
            District *district = [[District alloc] initWithAttributes:attribute];
            [muArray addObject:district];
        }

        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.districts</span> = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> arrayWithArray:muArray];

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *attribute in districts) {
            District *district = [[District alloc] initWithAttributes:attribute];
            [muArray addObject:district];
        }

        [[User currentUser] saveUserInfo];
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [AppManager addUserRemindNotification];</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//        [AppManager addCurrentOrderRemind];</span>

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (block) {
            block([<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSArray</span> arrayWithArray:muArray], <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>);

        }

    } failure:^(AFHTTPRequestOperation *operation, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSError</span> *error) {

        [User currentUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.state</span> = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-1"</span>;

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (block) {
            block(@[], error);
        }
    }];
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li><li style="box-sizing: border-box; padding: 0px 5px;">173</li><li style="box-sizing: border-box; padding: 0px 5px;">174</li><li style="box-sizing: border-box; padding: 0px 5px;">175</li><li style="box-sizing: border-box; padding: 0px 5px;">176</li><li style="box-sizing: border-box; padding: 0px 5px;">177</li><li style="box-sizing: border-box; padding: 0px 5px;">178</li><li style="box-sizing: border-box; padding: 0px 5px;">179</li><li style="box-sizing: border-box; padding: 0px 5px;">180</li><li style="box-sizing: border-box; padding: 0px 5px;">181</li><li style="box-sizing: border-box; padding: 0px 5px;">182</li><li style="box-sizing: border-box; padding: 0px 5px;">183</li><li style="box-sizing: border-box; padding: 0px 5px;">184</li><li style="box-sizing: border-box; padding: 0px 5px;">185</li><li style="box-sizing: border-box; padding: 0px 5px;">186</li><li style="box-sizing: border-box; padding: 0px 5px;">187</li><li style="box-sizing: border-box; padding: 0px 5px;">188</li><li style="box-sizing: border-box; padding: 0px 5px;">189</li><li style="box-sizing: border-box; padding: 0px 5px;">190</li><li style="box-sizing: border-box; padding: 0px 5px;">191</li><li style="box-sizing: border-box; padding: 0px 5px;">192</li><li style="box-sizing: border-box; padding: 0px 5px;">193</li><li style="box-sizing: border-box; padding: 0px 5px;">194</li><li style="box-sizing: border-box; padding: 0px 5px;">195</li><li style="box-sizing: border-box; padding: 0px 5px;">196</li><li style="box-sizing: border-box; padding: 0px 5px;">197</li><li style="box-sizing: border-box; padding: 0px 5px;">198</li><li style="box-sizing: border-box; padding: 0px 5px;">199</li><li style="box-sizing: border-box; padding: 0px 5px;">200</li><li style="box-sizing: border-box; padding: 0px 5px;">201</li><li style="box-sizing: border-box; padding: 0px 5px;">202</li><li style="box-sizing: border-box; padding: 0px 5px;">203</li><li style="box-sizing: border-box; padding: 0px 5px;">204</li><li style="box-sizing: border-box; padding: 0px 5px;">205</li><li style="box-sizing: border-box; padding: 0px 5px;">206</li><li style="box-sizing: border-box; padding: 0px 5px;">207</li><li style="box-sizing: border-box; padding: 0px 5px;">208</li><li style="box-sizing: border-box; padding: 0px 5px;">209</li><li style="box-sizing: border-box; padding: 0px 5px;">210</li><li style="box-sizing: border-box; padding: 0px 5px;">211</li><li style="box-sizing: border-box; padding: 0px 5px;">212</li><li style="box-sizing: border-box; padding: 0px 5px;">213</li><li style="box-sizing: border-box; padding: 0px 5px;">214</li><li style="box-sizing: border-box; padding: 0px 5px;">215</li><li style="box-sizing: border-box; padding: 0px 5px;">216</li><li style="box-sizing: border-box; padding: 0px 5px;">217</li><li style="box-sizing: border-box; padding: 0px 5px;">218</li><li style="box-sizing: border-box; padding: 0px 5px;">219</li><li style="box-sizing: border-box; padding: 0px 5px;">220</li><li style="box-sizing: border-box; padding: 0px 5px;">221</li><li style="box-sizing: border-box; padding: 0px 5px;">222</li><li style="box-sizing: border-box; padding: 0px 5px;">223</li><li style="box-sizing: border-box; padding: 0px 5px;">224</li><li style="box-sizing: border-box; padding: 0px 5px;">225</li><li style="box-sizing: border-box; padding: 0px 5px;">226</li><li style="box-sizing: border-box; padding: 0px 5px;">227</li><li style="box-sizing: border-box; padding: 0px 5px;">228</li><li style="box-sizing: border-box; padding: 0px 5px;">229</li><li style="box-sizing: border-box; padding: 0px 5px;">230</li><li style="box-sizing: border-box; padding: 0px 5px;">231</li><li style="box-sizing: border-box; padding: 0px 5px;">232</li><li style="box-sizing: border-box; padding: 0px 5px;">233</li><li style="box-sizing: border-box; padding: 0px 5px;">234</li><li style="box-sizing: border-box; padding: 0px 5px;">235</li><li style="box-sizing: border-box; padding: 0px 5px;">236</li><li style="box-sizing: border-box; padding: 0px 5px;">237</li><li style="box-sizing: border-box; padding: 0px 5px;">238</li><li style="box-sizing: border-box; padding: 0px 5px;">239</li><li style="box-sizing: border-box; padding: 0px 5px;">240</li><li style="box-sizing: border-box; padding: 0px 5px;">241</li><li style="box-sizing: border-box; padding: 0px 5px;">242</li><li style="box-sizing: border-box; padding: 0px 5px;">243</li><li style="box-sizing: border-box; padding: 0px 5px;">244</li><li style="box-sizing: border-box; padding: 0px 5px;">245</li><li style="box-sizing: border-box; padding: 0px 5px;">246</li><li style="box-sizing: border-box; padding: 0px 5px;">247</li><li style="box-sizing: border-box; padding: 0px 5px;">248</li><li style="box-sizing: border-box; padding: 0px 5px;">249</li><li style="box-sizing: border-box; padding: 0px 5px;">250</li><li style="box-sizing: border-box; padding: 0px 5px;">251</li><li style="box-sizing: border-box; padding: 0px 5px;">252</li><li style="box-sizing: border-box; padding: 0px 5px;">253</li><li style="box-sizing: border-box; padding: 0px 5px;">254</li><li style="box-sizing: border-box; padding: 0px 5px;">255</li><li style="box-sizing: border-box; padding: 0px 5px;">256</li><li style="box-sizing: border-box; padding: 0px 5px;">257</li><li style="box-sizing: border-box; padding: 0px 5px;">258</li><li style="box-sizing: border-box; padding: 0px 5px;">259</li><li style="box-sizing: border-box; padding: 0px 5px;">260</li><li style="box-sizing: border-box; padding: 0px 5px;">261</li><li style="box-sizing: border-box; padding: 0px 5px;">262</li><li style="box-sizing: border-box; padding: 0px 5px;">263</li><li style="box-sizing: border-box; padding: 0px 5px;">264</li><li style="box-sizing: border-box; padding: 0px 5px;">265</li><li style="box-sizing: border-box; padding: 0px 5px;">266</li><li style="box-sizing: border-box; padding: 0px 5px;">267</li><li style="box-sizing: border-box; padding: 0px 5px;">268</li><li style="box-sizing: border-box; padding: 0px 5px;">269</li><li style="box-sizing: border-box; padding: 0px 5px;">270</li><li style="box-sizing: border-box; padding: 0px 5px;">271</li><li style="box-sizing: border-box; padding: 0px 5px;">272</li><li style="box-sizing: border-box; padding: 0px 5px;">273</li><li style="box-sizing: border-box; padding: 0px 5px;">274</li><li style="box-sizing: border-box; padding: 0px 5px;">275</li><li style="box-sizing: border-box; padding: 0px 5px;">276</li><li style="box-sizing: border-box; padding: 0px 5px;">277</li><li style="box-sizing: border-box; padding: 0px 5px;">278</li><li style="box-sizing: border-box; padding: 0px 5px;">279</li><li style="box-sizing: border-box; padding: 0px 5px;">280</li><li style="box-sizing: border-box; padding: 0px 5px;">281</li><li style="box-sizing: border-box; padding: 0px 5px;">282</li><li style="box-sizing: border-box; padding: 0px 5px;">283</li><li style="box-sizing: border-box; padding: 0px 5px;">284</li><li style="box-sizing: border-box; padding: 0px 5px;">285</li><li style="box-sizing: border-box; padding: 0px 5px;">286</li><li style="box-sizing: border-box; padding: 0px 5px;">287</li><li style="box-sizing: border-box; padding: 0px 5px;">288</li><li style="box-sizing: border-box; padding: 0px 5px;">289</li><li style="box-sizing: border-box; padding: 0px 5px;">290</li><li style="box-sizing: border-box; padding: 0px 5px;">291</li><li style="box-sizing: border-box; padding: 0px 5px;">292</li><li style="box-sizing: border-box; padding: 0px 5px;">293</li><li style="box-sizing: border-box; padding: 0px 5px;">294</li><li style="box-sizing: border-box; padding: 0px 5px;">295</li><li style="box-sizing: border-box; padding: 0px 5px;">296</li><li style="box-sizing: border-box; padding: 0px 5px;">297</li><li style="box-sizing: border-box; padding: 0px 5px;">298</li><li style="box-sizing: border-box; padding: 0px 5px;">299</li><li style="box-sizing: border-box; padding: 0px 5px;">300</li><li style="box-sizing: border-box; padding: 0px 5px;">301</li><li style="box-sizing: border-box; padding: 0px 5px;">302</li><li style="box-sizing: border-box; padding: 0px 5px;">303</li><li style="box-sizing: border-box; padding: 0px 5px;">304</li><li style="box-sizing: border-box; padding: 0px 5px;">305</li><li style="box-sizing: border-box; padding: 0px 5px;">306</li><li style="box-sizing: border-box; padding: 0px 5px;">307</li><li style="box-sizing: border-box; padding: 0px 5px;">308</li><li style="box-sizing: border-box; padding: 0px 5px;">309</li><li style="box-sizing: border-box; padding: 0px 5px;">310</li><li style="box-sizing: border-box; padding: 0px 5px;">311</li><li style="box-sizing: border-box; padding: 0px 5px;">312</li><li style="box-sizing: border-box; padding: 0px 5px;">313</li><li style="box-sizing: border-box; padding: 0px 5px;">314</li><li style="box-sizing: border-box; padding: 0px 5px;">315</li></ul>

第二种场景,运行版本更新部分代码:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">AppDelegate<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.mm</span>文件
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)application:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> *)application didReceiveRemoteNotification:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *)userInfo
{

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//    [application setApplicationIconBadgeNumber:[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]];</span>
    [application setApplicationIconBadgeNumber:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//    FLDDLogDebug(@"Receive Notify: %@", [userInfo JSONString]);</span>
    FLDDLogDebug(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%@"</span>,userInfo);
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *alert = [[userInfo objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"aps"</span>] objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"alert"</span>];
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dictPush</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dictPush</span>  =[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> dictionaryWithDictionary:[userInfo objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"page"</span>] ];

    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span>* sreType =[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dictPush</span> valueForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"type"</span>];
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (![[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dictPush</span> valueForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"userTel"</span>] toString]isEqualToString:[AppManager valueForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"telephone"</span>]]) {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((sreType) && [sreType isEqualToString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mddy_needUpgrade"</span>])
    {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *url = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.dictPush</span> objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"downloadUrl"</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(url != <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>)
        {
            g_needUpgrade = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
            g_downloadUrl = url;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }
.
.
.
}

HomeViewController<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.m</span>文件
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pragma mark发单</span>
-(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)buttonSendPressed{
    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> hiddenDetail];
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (NotReachable == [SelfUser currentSelfUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.networkStatus</span>) {
        [MBProgressHUD hudShowWithStatus:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> :@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"当前网络不可用,请检查您的网络设置"</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((g_needUpgrade == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) && (g_downloadUrl != <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>))
    {
        [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] postNotificationName:UPDATE_HEART_VERSION_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }
    .
    .
    .
}


-(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)buttonSoonSendPressed{
    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> hiddenDetail];
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (NotReachable == [SelfUser currentSelfUser]<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.networkStatus</span>) {
        [MBProgressHUD hudShowWithStatus:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> :@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"当前网络不可用,请检查您的网络设置"</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(g_loginStat == LOGIN_STATE_LOGIN_SUCESS)
    {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.remainOrder</span> == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {
            [MBProgressHUD hudShowWithStatus:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> :@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"抱歉,您今日发单量已达上限,明天再来吧!"</span>];
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
        }

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.remainQuickOrder</span> == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {
            [MBProgressHUD hudShowWithStatus:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> :@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"抱歉,您今日极速发单量已达上限,明天再来吧!"</span>];
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
        }
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
    {
        [MBProgressHUD hudShowWithStatus:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> :@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"网络比蜗牛还慢,挤不进去呀"</span>];
        [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter]postNotificationName:ONCELOGININ object:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }



    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((g_needUpgrade == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) && (g_downloadUrl != <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>))
    {
        [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSNotificationCenter</span> defaultCenter] postNotificationName:UPDATE_HEART_VERSION_NOTIFICATION object:<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">nil</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;
    }
    .
    .
    .
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li></ul>

通过第三方平台实现版本更新,友盟的版本更新。 
在AppDelegate.mm或AppDelegate.m文件中的- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions函数中增加如下代码: 
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@”CFBundleShortVersionString”]; 
[MobClick setAppVersion:version]; 
[MobClick checkUpdate]; 
友盟的版本demo,见友盟文章: 
http://www.umeng.com/apps/4100008dd65107258db11ef4/upload 
友盟版本FAQ友盟文章: 
http://dev.umeng.com/auto-update/ios-doc/integration

第四种方案,app和服务器联合实现多版本检测测与更新(自己实现版本更新)方案。 
可以实现不同的版本升级到最新版本采用不同的策略,部分版本可以实现最新强制更新,部分版本实现强制更新。 
app登陆时把版本号发送给服务,服务器查询数据,若根据对应版本号的_updated,_force_updated的值和最新版本号的值来给客户端返回强制更新,是否有更新,更新地址等字段。若最新版本的两个字端都是N,N,app对应的记录是Y,Y,那么肯定是强制更新了;最新版本的两个字端都是Y,Y,那么肯定不需要更新了;若是Y,N,那么对应呢版本就是非强制更新了。服务器根据客户端发送的版本对应记录的更新状态返回对应的结果,客户端根据具体返回结果进行强制更新和非强制更新的逻辑。 
大型的软件如:windows操作系统采用的和第四种方案一样。 
这里写图片描述
经过实际使用这种不同的版本给予不同的升级方案的版本升级方案是最强大的。能够处理一个版本正在使用,另一个版本正在审核,审核中的版本(版本更新的返回值中增加-review字段)禁止版本检测,使用不同的地图key等问题。高德地图的免费key,只能免费试用500次访问,超过500次可能间歇性的停一天通过该免费key的访问高德地图(这就是有些应用在使用地图时,有些天不能看到地图的问题的原因,看来免费的是有代价的。若想你的软件更正规还时付费吧)。如我们的应用需要用到的高德地图需要高频率的访问,所以申请了一个付费没有次数限制的高德地图key,由于我们的版本没有稳定业务,变动较大,所以先用企业账号发布了一个app,用的是这个地图付费key,而苹果商店又放了一个app。企业帐户发布者证书建立的Bundle Identifier和用苹果发布者证书建立的Bundle Identifier是不能一样的。高德的一个key职能对用一个app的Bundle Identifier。这就出现了多应用可能要用一个高德地图key的鸡生蛋,蛋生鸡的问题。 
解决方案时: 
企业证书发布的app用的是付费key,苹果商店的地图用免费key,当需要全部转到苹果商店时,把数据库中对应的版本的下载地址指向苹果商店的下载地址,并设置为强制更新,数据库中苹果商店的那个对应版本的审核标志设置0,来让苹果商店的app启动高德付费地图key。 
这个方案的缺点是:由于安装的应用是同一个应用还是另一个新的应用看的是Bundle Identifier,不是应用名称,这样从企业者证书发布的app升级到苹果商店的app就会出现两个应用。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Delphi中开发Android应用程序时,可以实现自动更新功能。下面我将简要介绍相关步骤。 第一步,需要准备应用的新版本。可以将新版本应用上传到服务器或者通过其他方式提供给用户下载。 第二步,使用Delphi提供的网络请求组件,例如TIdHTTP,连接到服务器并检查是否有新版本的应用。可以通过向服务器发送请求,在返回的数据中包含应用的版本信息。 第三步,将返回的服务器数据与当前设备上安装的应用版本进行比较。如果服务器提供的新版本号大于当前版本号,则表示存在新版本。 第四步,如果有新版本,则向用户提示更新。可以通过展示一个对话框来通知用户有新版本可供下载和安装。 第五步,使用Delphi提供的下载组件,例如TDownloadURL,下载新版本应用的安装包。可以将下载的应用安装包保存到设备的指定目录中。 第六步,使用Delphi提供的安装API,例如PackageInstaller,自动安装新版本的应用。可以调用相应的安装方法来完成应用的安装。 最后,新版本应用安装完成后,可以向用户展示一个提示,告知更新成功,并提醒用户重新启动应用程序以应用变更生效。 总结起来,通过利用Delphi的网络请求、下载和安装组件,可以实现Android应用的自动更新功能,让用户能够及时获得应用的新版本。 ### 回答2: Delphi是一种用于开发应用程序的编程语言和集成开发环境。它支持多种操作系统平台,包括Windows、iOS和Android。 在Delphi中,我们可以使用一些方法来实现Android应用程序的自动更新。 首先,我们需要一个服务器来存储我们的应用程序文件和相关信息。当有新版本可用时,我们可以通过检查服务器上的版本号来确定是否需要更新。 其次,我们可以使用网络连接来下载新版本的应用程序文件。Delphi中有一些组件可以方便地实现文件下载功能,我们可以使用它们来实现自动更新。 在下载完成后,我们可以使用Delphi中的文件操作功能来安装新版本的应用程序。这可以通过使用Android操作系统提供的API来实现。 另外,我们还可以使用Delphi中的一些界面控件来显示更新进度和完成提示信息,以便用户了解当前的更新状态。 最后,为了确保应用程序的安全性,我们还可以在每次启动应用程序时进行版本检查,以便及时提醒用户更新。 综上所述,使用Delphi开发Android应用程序的自动更新功能是可行的。我们可以通过服务器、网络连接、文件操作和界面控件等功能来实现这一目标。这样,用户可以方便地获取到最新的应用程序版本,提升用户体验。 ### 回答3: Delphi的Android应用程序可以实现自动更新。在实现自动更新的过程中,我们可以采取以下几个步骤。 首先,需要在应用程序中添加一个检查更新的功能。可以通过与服务器端的接口进行通信,获取应用程序的最新版本号和下载链接。 其次,当用户打开应用程序时,可以在后台自动检测应用程序的版本号,与服务器上的最新版本号进行比较。如果发现新版本,则弹出对话框提示用户更新应用程序。 接下来,用户点击更新按钮后,应用程序会自动下载最新版本的安装包。可以使用Delphi自带的下载组件或者第三方框架进行下载操作。 下载完成后,需要使用Delphi的安装包管理器来安装新版本的应用程序。可以使用ShellExecute函数来调用安装包管理器进行安装操作。 最后,完成安装后,用户可以重新打开应用程序,并开始使用最新版本的应用。 需要注意的是,在实现自动更新的过程中,要确保应用程序正确处理后台任务的执行和网络请求的逻辑。此外,还要确保从服务器端获取的最新版本的安全性和合法性,避免用户的设备受到不必要的风险。 总结起来,Delphi的Android应用程序可以通过与服务器端的通信,实现自动更新功能。通过检查最新版本号、下载安装包和安装新版本的步骤,用户可以方便地获取并使用最新版本的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值