在微信小程序与小游戏中使用 LeanCloud
微信小程序是一个全新的跨平台移动应用平台,小游戏是小程序的一个类目,在小程序的基础上开放了游戏相关的 API。LeanCloud 为小程序提供一站式后端云服务,为你免去服务器维护、证书配置等繁琐的工作,大幅降低你的开发和运维成本。本文说明了如何在微信小程序与小游戏中使用 LeanCloud 提供的各项服务。 + Demo我们在小程序上实现了 LeanTodo 应用。在这个 Demo 中你可以看到: +
你可以通过微信扫描以下二维码进入 Demo。 Demo 的源码与运行说明请参考?https://github.com/leancloud/leantodo-weapp。 + 准备工作创建应用
配置域名白名单请按照?小程序域名白名单配置?的步骤配置。如果你不需要进行真机调试可以跳过这一步(可在开发者工具的?详情?>?项目设置?中勾选不校验安全域名、TLS 版本以及 HTTPS 证书)。 + 安装与初始化 SDK要使用 LeanCloud 的结构化对象存储、文件存储、用户系统等功能,需要使用 LeanCloud 存储 SDK。存储 SDK 的安装与初始化请请参阅《JavaScript SDK 安装指南》中对应平台的说明。 + 安装存储 SDK 后即可在? +
要使用 LeanCloud 的即时通讯服务实现聊天等功能,需要使用 LeanCloud 即时通讯 SDK。即时通讯 SDK 是与存储 SDK 独立的 SDK,我们在单独的?即时通讯?章节介绍其安装与初始化的步骤。 + 结构化对象存储所有的结构化对象存储 API 都能正常使用,详细的用法请参考?JavaScript 数据存储开发指南。 + 数据绑定
+ 以 LeanTodo Demo 中的 Todo 列表为例,要实现「将? getDataForRender todo =>
content todo.get'content'),19);">
done'done')
Page
data{
todos[]
},19);">
onReady()
new AV.Query'Todo'
findthen(todos thissetData
todos todosmapgetDataForRender}))catchconsoleerror}});
AV.Object?提供了一个? toJSON();
使用? + 当然,每次? isPlainObject target
target &&
targettoString== '[object Object]'
ObjectgetPrototypeOftarget prototype; _jsonify iftarget typeof targettoJSON ==='function'return();(ArrayisArray))_jsonify};
jsonify
isPlainObject
?keys).reduceresult key
...[key]: _jsonify])}),150);">{});
jsonify?能正确的处理? jsonify
todos // AV.Object list
user// AV.Object}));
值得注意的是从?
// todos 存放的是 AV.Object 列表,后续可以这些对象进行操作(比如调用其 save 方法),不参与渲染[],19);">
// data.todo 存放的是 JSON 数据,供 WXML 页面渲染用
todos
})
saveAll// 可以在这里获取到 this.todos 进行操作saveAll(todos
你可能会在某些过时的文档或者 Demo 中看到直接使用? + 文件存储在小程序中,可以将用户相册或拍照得到的图片上传到 LeanCloud 服务器进行保存。首先通过? wxchooseImage
count 1
sizeType['original''compressed'],19);">
sourceType'album''camera'
successfunctionresvar tempFilePath restempFilePaths[0];// 使用本地临时文件的路径构造 AV.FileFile'file-name'
blob
uri tempFilePath
// 上传save// 上传成功file consolelogfileurl()))// 上传发生异常
上传成功后可以通过? + 关于文件存储更详细的用法请参考?JavaScript 数据存储开发指南 · 文件。 + 用户系统小程序中提供了登录 API 来获取微信的用户登录状态,应用可以访问到用户的昵称、性别等基本信息。但是如果想要保存额外的用户信息,如用户的手机号码、收货地址等,或者需要在其他平台使用该用户登录,则需要使用 LeanCloud 的用户系统。 + 一键登录LeanCloud 的用户系统支持一键使用微信用户身份登录。要使用一键登录功能,需要先设置小程序的 AppID 与 AppSecret: +
这样你就可以在应用中使用? AVUserloginWithWeapp().user globalData user}).
使用一键登录方式登录时,LeanCloud 会将该用户的小程序?
"authData"
"lc_weapp"
"session_key""2zIDoEEUhkb0B5pUTzsLVg==""expires_in"7200"openid""obznq0GuHPxdRYaaDkPOHk785DuA"}
如果用户是第一次使用此应用,调用登录 API 会创建一个新的用户,你可以在 控制台 >?存储?中的? + 用户的登录状态会保存在客户端中,可以使用? // 假设已经通过 AV.User.loginWithWeapp() 登录
// 获得当前登录用户 user current// 调用小程序 API,得到用户信息
wxgetUserInfouserInfo// 更新当前用户的信息
userset// 成功,此时可在控制台中看到更新后的用户信息
authData?默认只有对应用户可见,开发者可以使用 masterKey 在云引擎中获取该用户的? + 小程序的登录态( + 使用 unionid微信开放平台使用?unionid?来区分用户的唯一性,也就是说同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 unionid 都是同一个,而 openid 会是多个。如果你想要实现多个小程序之间,或者小程序与使用微信开放平台登录的应用之间共享用户系统的话,则需要使用 unionid 登录。 要在小程序中使用 unionid 登录,请先确认已经在?微信开放平台?绑定了该小程序 + 在小程序中有很多途径可以?获取到 unionid。不同的 unionid 获取方式,接入 LeanCloud 用户系统的方式也有所不同。 + 一键登录时静默获取 unionid当满足以下条件时,一键登录 API? 微信开放平台帐号下存在同主体的公众号,并且该用户已经关注了该公众号。
要启用这种方式,需要在一键登录时指定参数?
preferUnionIdtrue
使用 unionid 登录后,用户的 authData 中会增加? "obznq0GuHPxdRYaaDkPOHk785DuA""unionid""ox7NLs5BlEqPS4glxqhn5kkO0UUo""_weixin_unionid""uid"
用 unionid + openid 登录时,会按照下面的步骤进行用户匹配: 如果已经存在对应 unionid( authData._weixin_unionid.uid )的用户,则会直接作为这个用户登录,并将所有信息(openid 、session_key 、unionid ?等)更新到该用户的?authData.lc_ewapp ?中。
authData.lc_weapp.openid )的用户,则会直接作为这个用户登录,并将所有信息(authData.lc_ewapp ?中,同时将?unionid ?保存到?authData._weixin_unionid.uid ?中。authData._weixin_unionid.uid ?中。不管匹配的过程是如何的,最终登录用户的? + LeanTodo Demo?便是使用这种方式登录的,如果你已经关注了其关联的公众号(搜索 AVOSCloud,或通过小程序关于页面的相关公众号链接访问),那么你在登录后会在 LeanTodo Demo 的?设置 - 用户?页面看到当前用户的? + 需要注意的是: 如果用户不符合上述静默获取 unionid 的条件,那么就算指定了? preferUnionId ?也不会使用 unionid 登录。
如果用户符合上述静默获取 unionid 的条件,但没有指定? + 通过其他方式获取 unionid 后登录 |