蒲公英App开发之检测新版本

本文介绍了一种在App内部实现版本检测和更新的方法,通过调用特定API获取应用的最新版本信息,并与当前运行版本进行比较。如果发现新版本,将提示用户更新,实现了App的自动检查和升级功能。

https://www.jianshu.com/p/2d3f048511d7

 

2017.04.17 16:22* 字数 62 阅读 422评论 0喜欢 1

可以在App内部实现检测版本更新并实现安装。

核心代码

#define API_PGYER_UPDATE_URL                                                    @"https://www.pgyer.com/apiv1/app/builds"

#define PGY_API_KEY                                                             @""

#define PGY_APP_ID                                                              @""

 

- (void)checkForUpdates {

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSDictionary *parameters = @{@"aId":PGY_APP_ID,@"page":@1,@"_api_key":PGY_API_KEY};

        NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:API_PGYER_UPDATE_URL parameters:parameters error:nil];

        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

        AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

        MJWeakSelf

        NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {

            if (error) {

                NSLog(@"Error: %@", error);

                return;

            }

            NSLog(@"%@ %@", response, responseObject);

            if (responseObject && [responseObject isKindOfClass:[NSDictionary class]]) {

                NSDictionary *responseDictionary = (NSDictionary *)responseObject;

                if (responseDictionary && [responseDictionary objectForKey:@"data"]) {

                    NSDictionary *data = [responseDictionary objectForKey:@"data"];

                    if (!data || data.count == 0) {

                        return;

                    }

                    NSArray *array = [data objectForKey:@"list"];

                    if (array) {

                        BFLarkAppDeatilModel *appDeatil = [BFLarkAppDeatilModel mj_objectArrayWithKeyValuesArray:array].firstObject;

                        if (appDeatil) {

                            // 有新版本

                            if (appDeatil.appVersionNo.integerValue > [[[UIApplication sharedApplication] appBuildVersion] integerValue]) {

                                dispatch_async(dispatch_get_main_queue(), ^{

                                    [BFAlertView showAlertInViewController:weakSelf.view withTitle:[NSString stringWithFormat:@"Current BuildVersion %@, New BuildVersion %@",[[UIApplication sharedApplication] appBuildVersion],appDeatil.appVersionNo] message:@"旧版就像初恋,很美但再也回不去,快去收获新欢" cancelButtonTitle:@"取消" destructiveButtonTitle:@"残忍拒绝" otherButtonTitles:@[@"欣然前往"] tapBlock:^(RMUniversalAlert * _Nonnull alert, NSInteger buttonIndex) {

                                        // 去更新

                                        if (buttonIndex == 2) {

                                            NSString *urlString = [NSString stringWithFormat:@"itms-services://?action=download-manifest&url=https://www.pgyer.com/app/plist/%@",appDeatil.appKey];

                                            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

                                        }

                                    }];

                                });

                            }

                            // 当前是最新版本

                            else {

                                dispatch_async(dispatch_get_main_queue(), ^{

                                    // 更新界面

                                    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您的版本是最新的" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

                                    [alertView show];

                                });

                            }

                        }

                    }

                }

            }

        }];

        [dataTask resume];

    });

}

BFLarkAppDeatilModel

#import <Foundation/Foundation.h>

 

@interface BFLarkAppDeatilModel : NSObject

 

@property (nonatomic, copy) NSString *appKey;

 

@property (nonatomic, copy) NSString *appVersion;

 

@property (nonatomic, copy) NSString *appBuildVersion;

 

@property (nonatomic, copy) NSString *appName;

 

@property (nonatomic, copy) NSString *appIcon;

 

@property (nonatomic, copy) NSString *appCreated;

 

@property (nonatomic, copy) NSString *appFileSize;

 

@property (nonatomic, copy) NSString *appIdentifier;

 

@property (nonatomic, copy) NSString *appType;

 

@property (nonatomic, copy) NSString *appVersionNo;

 

@end

API详解

获取App所有版本

API地址

POST http://www.pgyer.com/apiv1/app/builds

POST参数

参数

类型

说明

aId

String

App Id

page

Integer

历史版本分页页数

_api_key

String

API Key

返回数据

返回参数

类型

说明

appKey

String

返回应用最新build的App Key

appType

Integer

应用类型(1:iOS; 2:Android

appFileSize

Integer

App 文件大小

appName

String

应用名称

appVersion

String

版本号

appVersionNo

Integer

适用于Android的版本编号,iOS始终为0

appBuildVersion

Integer

蒲公英生成的用于区分历史版本的build号

appIdentifier

String

应用程序包名,iOS为BundleId,Android为包名

appIcon

String

应用的Icon图标key,访问地址为 http://o1wh05aeh.qnssl.com/image/view/app_icons/[应用的Icon图标key]

appCreated

String

应用上传时间

参考文档

蒲公英API

转载于:https://www.cnblogs.com/sundaysgarden/p/10318563.html

蒲公英是一款非常受欢迎的Android应用,它提供了各种各样的应用程序和游戏供用户下载和安装。每当一个应用程序更新时,蒲公英也会相应更新。 蒲公英的更新频率通常会视具体情况而定。当开发者发布一个新的应用程序版本时,蒲公英就会通过自动更新机制提供给用户。这样一方面可以让用户第一时间体验到新的功能和修复的bug,另一方面也可以确保应用程序的安全性。 蒲公英的更新方式一般有两种:主动更新和被动更新。主动更新是指当用户打开蒲公英应用程序时,蒲公英会检查是否有新的版本可供下载。如果有新版本,用户会收到一个通知,可以选择立即更新或稍后再更新。被动更新是指蒲公英会在后台检查应用程序是否有可用的更新,并在用户打开蒲公英时自动进行更新。 当用户选择更新应用程序时,蒲公英会下载最新的应用程序文件并安装在用户的设备上。安装完成后,用户可以立即使用新版本的应用程序。 蒲公英的更新除了提供新的功能和bug修复外,还可能包括性能优化、界面改进、安全性增强等方面的改进。开发者会根据用户的反馈和市场变化来持续改进和更新应用程序,以提供更好的用户体验。 综上所述,蒲公英Android应用程序会不断更新,以提供新的功能、修复bug,并不断改进用户体验。用户可以通过主动更新或被动更新方式获得最新的应用程序版本,并享受到更新带来的各种好处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值