如果想创业,对于有限的资源和人力来说,BaaS服务是最佳选择。

什么是Baas服务?

BaaS(后端即服务:Backend as a service)是第三方公司为移动应用(Web应用)开发者提供了整合云后端边界的服务。它为应用开发提供后台的云服务,包括提供存储、托管环境等。想一想,在你创业的阶段,少量用户的情况下会为你减少多大的成本?这就是Baas服务带来的核心价值。

在这个万众创业的年代,如果自己不整理一些事情的话,还真是对不住现在的热情。如果你想开发一个Web应用,正常的流程是你需要一个服务端,一个前端,一个设计,半个产品(没错,半个产品就是老板你)。如果你在初创阶段使用了Baas服务,那么起码你只需要半个服务端,一个前端,一个设计,半个产品了,甚至连运维都可以省掉很多事情(数据要备份吧?数据处理要稳定吧?安全可以省心一些了吧?)。

市面上Baas服务整理

相信总有一款是你适合的

假设我们有一个简单客服系统,它应该属于IM类型的应用,当然数据也可以进行存储(客服聊天的数据对于客户来说总是需要存储的),我们可以利用Baas服务来完成这个App或者Web应用。

LeanCloud()

LeanCloud为开发者提供了一套解决方案:包括数据存储,用户管理,消息推送等。利用LeanCloud不仅可以开发移动应用也可以开发Web应用,简单的维护从此之后你只需要写少量的服务端代码即可(不需要再买服务器啦,当你的业务逻辑比较绕的时候,为了数据结构的处理,你可以上传少量的处理阶段的代码)。

APICloud()

如果你只想开发移动应用,那么APICloud给你提供了更简单的方式,基于APICloud提供的“云API”和“端API”,开发者甚至可以忘记繁杂的服务端编码,也可以忘记复杂的Objective-C和Java,以及那数不清的屏幕适配。

纪念那已经死去的Parse()

Parse是国外提供的Baas服务(老牌Baas服务),不过自从被Facebook收购了之后,难逃那“天地动荡”,关门了。如果你对它在服务端完整的实现感兴趣(好消息是最后一刻它们开源了),可以访问 来研究研究,如何实现的Baas服务。

当然国内还有很多创业者提供了类似的服务,大家都想从这个领域来分一杯羹,目前来看LeanCloud相对稳定一些。

利用LeanCloud来开发一个IM APP

当然注册账户,怎么创建应用,以及新建一个iOS项目就不用说了,最关键的是你需要两个key:APP ID和APP Key,下载LeanCloud提供的SDK导入到Xcode工程中,拿到这两个Key时,你需要在AppDelegate文件didFinishLaunchingWithOptions协议中进行配置。

#import<AVOSCloud;

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

// Override point for customization after application launch.

[AVOSCloud setApplicationId:@LEANCLOUD_APP_ID clientKey:@LEANCLOUD_APP_KEY];

//调试日志

[AVOSCloud setVerbosePolicy:kAVVerboseShow];

[AVLogger addLoggerDomain:AVLoggerDomainIM];

[AVLogger addLoggerDomain:AVLoggerDomainCURL];

[AVLogger setLoggerLevelMask:AVLoggerLevelAll];

//异常捕获

[AVAnalytics setCrashReportEnabled:NO completion:^{

}];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveMissIMPlistFile:) name:@"saveMissIMPlist" object:nil];

= [[NSMutableArray alloc] init];

return YES;

}

接下来你需要实现的主要是发送端和接收端,你需要使用到的是AVIMConversation类和遵循AVIMClientDelegate协议。前者用于发送,后者用于接收。在实现IM对话时,如果是多群组聊天,你可能还需要设计一下数据结构,比如有type这样的字段用来描述,如果为1时客服发送,如果为2时为客户发送,这样根据这些字段就能渲染出不同的界面。LeanCloud对于消息的设计分为了不同的类型,消息有文本消息,媒体消息等,顾名思义,文本消息说时其本身,媒体消息可能就存在不同的类型,比如图片,音频,视频等。

现在你需要实现两个协议来接收文本消息和媒体消息:

#pragma mark 接收文本消息

-(void)conversation:(AVIMConversation *)conversation didReceiveCommonMessage:(AVIMMessage *)message

{

if (!conversation || !message) {

NSLog(@"—-出现异常");

}else{

NSLog(@"—-接收文本成功");

= conversation;

NSMutableDictionary *dataMessage = [[NSMutableDictionary alloc] init];

dataMessage[@"name"] = @"service";

dataMessage[@"text"] = me;

dataMessage[@"from"] = @(kMISSIMFROMOTHER);

dataMessage[@"type"] = @(kMISSIMTYPETEXT);

= me;

= me;

++;

[ addMissIMDataSource:dataMessage ordered:YES];

//注册通知

[self postMessageCenter: conversationId:self.conversationId timeId: messageNumber: MissIMPlistPath:.MissIMPlistPath];

NSInteger row = .da – 1;

NSIndexPath *indexPath = [NSIndexPath indexPathForItem:row inSection:0];

[ reloadData];

[ scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

}

}

#pragma mark 接收媒体消息

-(void)conversation:(AVIMConversation *)conversation didReceiveTypedMessage:(AVIMTypedMessage *)message

{

if (!conversation || !message) {

NSLog(@"—出现异常");

}else{

NSLog(@"—接收图片成功");

AVIMMessageMediaType messageTpe = me;

if (messageTpe == kAVIMMessageMediaTypeImage) {

= conversation;

NSData *data = [me getData];

UIImage *pickerImage = [UIImage imageWithData:data];

NSMutableDictionary *dataMessage = [[NSMutableDictionary alloc] init];

dataMessage[@"name"] = @"service";

dataMessage[@"from"] = @(kMISSIMFROMOTHER);

dataMessage[@"type"] = @(kMISSIMTYPEIMAGE);

dataMessage[@"pickerImage"] = pickerImage;

= me;

= me;

++;

[ addMissIMDataSource:dataMessage ordered:YES];

//注册通知

[self postMessageCenter: conversationId:self.conversationId timeId: messageNumber: MissIMPlistPath:.MissIMPlistPath];

NSInteger row = .da – 1;

NSIndexPath *indexPath = [NSIndexPath indexPathForItem:row inSection:0];

[ reloadData];

[ scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

}

}

}

对于传输过来的数据LeanCloud给予了AVIMMessage类和AVIMTypeMessage类来获取数据,这里面提供了很多有用的属性,比如AVIMTypeMessage类中的mediaType属性标识了传输过来数据的类型(是文本还是图片)。剩下的,你只需要解析这些数据出来,然后填充到你的UI中。

对于发送消息的逻辑稍微有一些不同,就用户而言它都有唯一性,所以你需要提供一个唯一的ID来标明你的用户。当你需要和你的客户进行对话时,你要先建立连接,然后判断一下是否曾经连接过,如果连接过就开启上一次的连接。如果没有则需要创建一个新的连接。

[ openWithClientId:.userId callback:^(BOOL succeeded, NSError *error) {

if (succeeded && !error) {

AVIMConversationQuery *query = [weakSelf.avimClient conversationQuery];

[query whereKey:kAVIMKeyMember containsAllObjectsInArray:clientId];

[query findConversationsWithCallback:^(NSArray *objects, NSError *error) {

if && !error) {

NSLog(@"与%@建立连接",kMissIMServiceClientId);

weakSelf.avimConversation = objects[0];

weakSelf.conversationId = weakSelf.avimConver;

if (!weakSelf.modelManager.da > 0 && weakSelf.modelManager.isHistory) {

AVHistoryMessageQuery *historyQuery = [AVHistoryMessageQuery queryWithConversationId:weakSelf.avimConver timestam limit:1];

NSArray *historyMessage = [historyQuery find];

NSLog(@"history message —- %@",historyMessage);

if > 0) {

AVHistoryMessage *lastMessage = historyMessage[0];

weakSelf.historyTimeId = la;

[weakSelf.mainUI.MissIMActivity startAnimating];

[weakSelf.modelManager parseHistoryMessage:historyMessage ordered:NO];

dispatch_async(dispatch_get_main_queue(), ^{

[weakSelf.mainUI.MissIMActivity stopAnimating];

[weakSelf.mainUI.MissIMTableView reloadData];

});

}

}

}else{

if (error) {

NSLog(@"网络错误,无法建立链接");

}else{

[weakSelf.avimClient createConversationWithName:@"MissIM" clientIds:clientId callback:^(AVIMConversation *conversation, NSError *error) {

if (error) {

NSLog(@"创建聊天出错");

}else{

NSLog(@"创建一个新的聊天");

weakSelf.avimConversation = conversation;

}

}];

}

}

weakSelf.a = NO;

}];

}

}];

当你连接成功之后,你就可以向你的客户发送消息了。详细的Demo例子,你可以访问我的Github MissIMUI项目:()

内置福利

在后台回复福利,可以获取下载《全球移动技术大会2016》PPT集合。

另外安利个广告,我们很认真,严谨的提供了一个付费订阅服务《Mulgore Pro 订阅》,其目的是帮助前端开发者提升你的知识结构和JavaScript水平,在这里你可以获取在市面上看不到的内容和资源,有资深开发者帮助你Review你的代码和话题讨论。你可以点击菜单中间的Pro计划来获取详细的信息,我只能说一句:绝对的物有所值。

关注我们

扫二维码 或搜索 fed-talk ,关注我们的微信公众号,也欢迎你将它分享给自己的朋友。

1.《没有服务端—依赖BaaS打造移动/Web应用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《没有服务端—依赖BaaS打造移动/Web应用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.cxvn.com/gl/djyxgl/171704.html