基于HarmonyOS Next的生活服务类应用开发实战:AppGallery Connect集成指南

一、引言:生活服务类应用的鸿蒙开发优势

随着智能终端设备的普及,生活服务类应用已经成为用户日常生活中不可或缺的一部分。基于HarmonyOS Next开发生活服务应用,可以充分利用分布式能力、原子化服务和卡片等特性,为用户提供无缝的全场景体验。

AppGallery Connect作为华为官方的一站式应用服务平台,为开发者提供了从开发、测试到上架的全流程支持。本文将重点介绍如何利用AppGallery Connect服务开发一个完整的生活服务类应用。

二、项目准备与环境搭建

首先我们需要创建一个新的鸿蒙应用项目:

  1. 打开DevEco Studio,选择"File > New > New Project"
  2. 选择"Application"模板,然后选择"Empty Ability"
  3. 配置项目信息:

    • Project Name: LifeServiceDemo
    • Bundle Name: com.example.lifeservice
    • Save Location: 选择本地存储路径
    • Compile SDK: HarmonyOS Next最新版本
    • Language: ArkTS

完成项目创建后,我们需要在AppGallery Connect控制台配置应用信息:

  1. 登录AppGallery Connect控制台
  2. 选择"我的项目",点击"添加项目"
  3. 填写项目名称和时区后创建项目
  4. 在项目下选择"添加应用",填写应用信息

三、集成AppGallery Connect基础服务

1. 配置项目依赖

在项目的entry/build.gradle文件中添加AppGallery Connect依赖:

// entry/build.gradle
dependencies {
    // AppGallery Connect核心服务
    implementation 'com.huawei.agconnect:agconnect-core-harmony:1.6.0.300'
    // 认证服务
    implementation 'com.huawei.agconnect:agconnect-auth-harmony:1.6.0.300'
    // 云数据库
    implementation 'com.huawei.agconnect:agconnect-clouddb-harmony:1.6.0.300'
}

2. 初始化AGC SDK

在应用入口处初始化AGC服务:

// entry/src/main/ets/entryability/EntryAbility.ts
import Ability from '@ohos.app.ability.UIAbility';
import agconnect from '@hw-agconnect/core-harmony';

export default class EntryAbility extends Ability {
    onCreate(want, launchParam) {
        console.info('EntryAbility onCreate');
        // 初始化AGC SDK
        try {
            agconnect.instance().init(this.context);
            console.info('AGC SDK initialized successfully');
        } catch (error) {
            console.error('AGC SDK initialization failed: ' + error);
        }
    }
}

四、实现生活服务核心功能

1. 用户认证模块

生活服务类应用通常需要用户登录功能,我们可以使用AppGallery Connect的认证服务:

// entry/src/main/ets/pages/LoginPage.ets
import { agconnect } from '@hw-agconnect/core-harmony';
import { auth } from '@hw-agconnect/auth-harmony';

@Entry
@Component
struct LoginPage {
    @State phoneNumber: string = '';
    @State verifyCode: string = '';
    @State isLoggedIn: boolean = false;

    // 发送验证码
    sendVerifyCode() {
        let request = {
            countryCode: "86",
            phoneNumber: this.phoneNumber,
            verifyCodeType: 0 // 0:注册/登录验证码
        };
        
        auth().requestVerifyCode(request)
            .then(() => {
                console.info('Verify code sent successfully');
                prompt.showToast({ message: '验证码已发送' });
            })
            .catch(err => {
                console.error('Failed to send verify code: ' + err);
                prompt.showToast({ message: '验证码发送失败' });
            });
    }

    // 手机号验证码登录
    loginWithPhone() {
        let credential = auth.PhoneAuthProvider.credentialWithVerifyCode(
            "86", 
            this.phoneNumber, 
            this.verifyCode
        );
        
        auth().signIn(credential)
            .then(user => {
                console.info('Login success: ' + JSON.stringify(user));
                this.isLoggedIn = true;
                prompt.showToast({ message: '登录成功' });
            })
            .catch(err => {
                console.error('Login failed: ' + err);
                prompt.showToast({ message: '登录失败' });
            });
    }

    build() {
        Column() {
            if (!this.isLoggedIn) {
                TextInput({ placeholder: '请输入手机号' })
                    .width('90%')
                    .height(50)
                    .onChange(value => this.phoneNumber = value)
                
                TextInput({ placeholder: '请输入验证码' })
                    .width('90%')
                    .height(50)
                    .onChange(value => this.verifyCode = value)
                
                Row() {
                    Button('获取验证码')
                        .onClick(() => this.sendVerifyCode())
                    
                    Button('登录')
                        .onClick(() => this.loginWithPhone())
                }
            } else {
                Text('欢迎回来!')
                    .fontSize(20)
            }
        }.width('100%').height('100%').justifyContent(FlexAlign.Center)
    }
}

2. 服务信息展示模块

生活服务应用通常需要展示各类服务信息,我们可以使用云数据库存储这些数据:

// entry/src/main/ets/pages/ServiceListPage.ets
import { clouddb } from '@hw-agconnect/clouddb-harmony';

// 定义服务数据模型
@Class
class ServiceInfo {
    @Field()
    id: string = '';
    
    @Field()
    name: string = '';
    
    @Field()
    description: string = '';
    
    @Field()
    price: number = 0;
    
    @Field()
    rating: number = 0;
}

@Entry
@Component
struct ServiceListPage {
    @State serviceList: ServiceInfo[] = [];
    
    aboutToAppear() {
        this.queryServices();
    }
    
    // 查询服务列表
    queryServices() {
        const cloudDBZone = clouddb.cloudDBZone('LifeServiceDB');
        const query = clouddb.CloudDBZoneQuery.where(ServiceInfo).orderByDesc('rating');
        
        cloudDBZone.executeQuery(query, ServiceInfo)
            .then(result => {
                this.serviceList = result;
                console.info('Query services success: ' + result.length);
            })
            .catch(err => {
                console.error('Query services failed: ' + err);
            });
    }
    
    build() {
        List({ space: 10 }) {
            ForEach(this.serviceList, (item: ServiceInfo) => {
                ListItem() {
                    Column() {
                        Text(item.name)
                            .fontSize(18)
                            .fontWeight(FontWeight.Bold)
                        
                        Text(item.description)
                            .fontSize(14)
                            .margin({ top: 5 })
                        
                        Row() {
                            Text('¥' + item.price)
                                .fontColor(Color.Red)
                            
                            Text('评分: ' + item.rating.toFixed(1))
                                .margin({ left: 20 })
                        }.margin({ top: 5 })
                    }.padding(10)
                }
            })
        }.width('100%').height('100%')
    }
}

五、高级功能实现

1. 服务预约功能

// entry/src/main/ets/pages/ReservationPage.ets
import { clouddb } from '@hw-agconnect/clouddb-harmony';

@Class
class Reservation {
    @Field()
    id: string = '';
    
    @Field()
    serviceId: string = '';
    
    @Field()
    userId: string = '';
    
    @Field()
    reserveTime: string = '';
    
    @Field()
    status: number = 0; // 0:待确认 1:已确认 2:已完成 3:已取消
}

@Entry
@Component
struct ReservationPage {
    @State serviceInfo: ServiceInfo = new ServiceInfo();
    @State reserveDate: string = '2023-12-31';
    @State reserveTime: string = '14:00';
    
    // 提交预约
    submitReservation() {
        const reservation = new Reservation();
        reservation.serviceId = this.serviceInfo.id;
        reservation.reserveTime = `${this.reserveDate} ${this.reserveTime}`;
        
        const cloudDBZone = clouddb.cloudDBZone('LifeServiceDB');
        cloudDBZone.executeUpsert(reservation)
            .then(() => {
                console.info('Reservation submitted successfully');
                prompt.showToast({ message: '预约提交成功' });
            })
            .catch(err => {
                console.error('Reservation failed: ' + err);
                prompt.showToast({ message: '预约失败' });
            });
    }
    
    build() {
        Column() {
            Text(this.serviceInfo.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
            
            Text('预约时间')
                .margin({ top: 20 })
            
            DatePicker({
                start: '2023-01-01',
                end: '2023-12-31',
                selected: this.reserveDate
            }).onChange(value => this.reserveDate = value)
            
            TimePicker({
                selected: this.reserveTime
            }).onChange(value => this.reserveTime = value)
            
            Button('提交预约')
                .margin({ top: 20 })
                .onClick(() => this.submitReservation())
        }.padding(20)
    }
}

2. 服务评价功能

// entry/src/main/ets/pages/ReviewPage.ets
import { clouddb } from '@hw-agconnect/clouddb-harmony';

@Class
class Review {
    @Field()
    id: string = '';
    
    @Field()
    serviceId: string = '';
    
    @Field()
    userId: string = '';
    
    @Field()
    rating: number = 5;
    
    @Field()
    comment: string = '';
    
    @Field()
    createTime: string = '';
}

@Entry
@Component
struct ReviewPage {
    @State serviceInfo: ServiceInfo = new ServiceInfo();
    @State rating: number = 5;
    @State comment: string = '';
    
    // 提交评价
    submitReview() {
        const review = new Review();
        review.serviceId = this.serviceInfo.id;
        review.rating = this.rating;
        review.comment = this.comment;
        review.createTime = new Date().toISOString();
        
        const cloudDBZone = clouddb.cloudDBZone('LifeServiceDB');
        cloudDBZone.executeUpsert(review)
            .then(() => {
                console.info('Review submitted successfully');
                prompt.showToast({ message: '评价提交成功' });
            })
            .catch(err => {
                console.error('Review failed: ' + err);
                prompt.showToast({ message: '评价失败' });
            });
    }
    
    build() {
        Column() {
            Text(this.serviceInfo.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
            
            Text('请为服务评分')
                .margin({ top: 20 })
            
            Slider({
                value: this.rating,
                min: 1,
                max: 5,
                step: 1,
                style: SliderStyle.OutSet
            }).onChange(value => this.rating = value)
            
            Text('评分: ' + this.rating)
            
            TextInput({ placeholder: '请输入评价内容' })
                .width('90%')
                .height(100)
                .margin({ top: 20 })
                .onChange(value => this.comment = value)
            
            Button('提交评价')
                .margin({ top: 20 })
                .onClick(() => this.submitReview())
        }.padding(20)
    }
}

六、应用发布与运营

完成开发后,我们可以通过AppGallery Connect发布应用:

  1. 在DevEco Studio中选择"Build > Generate Key and CSR"生成签名证书
  2. 配置签名信息后,选择"Build > Build Hap(s)/App(s) > Build Release Hap(s)"
  3. 在AppGallery Connect控制台选择"我的应用",点击"发布应用"
  4. 上传生成的HAP文件,填写应用信息,提交审核

AppGallery Connect还提供了丰富的运营分析功能:

  • 应用分析:查看用户活跃度、留存率等数据
  • 用户获取:跟踪用户来源渠道
  • 变现分析:分析应用收入情况
  • 性能管理:监控应用性能指标

七、总结

本文详细介绍了如何基于HarmonyOS Next和AppGallery Connect开发一个完整的生活服务类应用。通过集成认证服务、云数据库等核心功能,我们可以快速构建功能丰富的应用。鸿蒙的分布式能力还能让我们轻松实现跨设备协同,为用户提供无缝的全场景体验。

随着HarmonyOS生态的不断发展,生活服务类应用将会有更多创新可能。开发者可以继续探索原子化服务、卡片等特性,打造更加智能、便捷的服务体验。


林钟雪
4 声望0 粉丝