如果想创业,对于有限的资源和人力来说,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