1. 前言
随着移动互联网的普及,小程序已经成为了移动互联网的重要组成部分,UniApp则是其中比较火热的一款开发框架,因为它可以同时开发多种小程序,如微信、支付宝、百度等等。但不同的小程序平台之间会有些许的差异,因此需要针对不同的小程序平台进行不同的开发,今天我们就来谈谈如何在开发 UniApp 时区分微信小程序和支付宝小程序。
2. 如何判断是微信还是支付宝小程序
2.1 全局对象 wx 或 my
在 UniApp 开发微信小程序时,可以直接使用 wx
全局对象对微信小程序的 API 进行开发,如下:
wx.login({
success (res) {
if (res.code) {
// 发起网络请求
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
而支付宝小程序则需要使用 my
全局对象,如下:
my.getLocation({
success(res) {
console.log(res);
},
fail() {
my.alert({ title: '定位失败' });
},
});
因此,我们可以通过判断当前全局对象是 wx
还是 my
来判断当前运行的是微信小程序还是支付宝小程序。
if (typeof wx !== 'undefined') {
// 微信小程序
} else if (typeof my !== 'undefined') {
// 支付宝小程序
}
2.2 获取小程序运行环境参数 platform
UniApp 小程序在初始化运行时,会根据当前平台自动注入全局对象(如上面提到的 wx / my 等),同时还会注入一个小程序运行环境参数 uni.getSystemInfoSync().platform
。通过获取该参数,我们也可以判断当前运行的是微信小程序还是支付宝小程序。
if (uni.getSystemInfoSync().platform === 'wechat') {
// 微信小程序
} else if (uni.getSystemInfoSync().platform === 'Alipay') {
// 支付宝小程序
}
3. 如何根据不同的小程序做不同的适配
针对不同的小程序平台,可能需要做出不同的适配,以下是一些常见的适配场景。
3.1 样式适配
微信小程序和支付宝小程序在样式适配上可能会有些许差异,这时可以使用条件编译语句来解决。以底部菜单栏为例,微信小程序和支付宝小程序对应的 tabbar
标签分别如下:
<span class="hljs-comment">//微信小程序</span>
<tabbar>
<tabbar-item></tabbar-item>
</tabbar>
<span class="hljs-comment">//支付宝小程序
<tabbar>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
</tabbar>
这时我们可以使用条件编译语句来隐藏多余的 tabbar-item
,具体实现如下:
<span class="hljs-comment">//微信小>序</span>
<tabbar>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
#ifdef MP-WEIXIN
<tabbar-item></tabbar-item>
#endif
</tabbar>
<span class="hljs-comment">//支付宝小程序</span>
<tabbar>
#ifdef MP-ALIPAY
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
<tabbar-item></tabbar-item>
#endif
</tabbar>
3.2 API 适配
微信小程序和支付宝小程序在某些 API 的调用方式上也可能存在差异,这时可以使用条件编译语句来判断并进行不同的调用。例如,获取用户信息的 API 在微信和支付宝小程序中的调用方式如下:
<span class="hljs-comment">//微信小程序</span>
wx.getUserInfo({
success(res) {
console.log(res)
}
})
<span class="hljs-comment">//支付宝小程序</span>
my.getAuthUserInfo({
success(res) {
console.log(res);
}
});
这时我们可以使用条件编译语句来判断当前小程序平台,然后进行不同的 API 调用。具体实现如下:
#ifdef MP-WEIXIN
wx.getUserInfo({
success(res) {
console.log(res)
}
})
#endif
#ifdef MP-ALIPAY
my.getAuthUserInfo({
success(res) {
console.log(res);
}
});
#endif
4. 总结
通过全局对象和小程序运行环境参数,我们可以很容易地判断当前运行的是微信小程序还是支付宝小程序。同时,在样式和 API 调用方面可能会存在些许差异,针对这些差异,我们可以使用条件编译语句来进行适配。希望这篇文章能够对开发 UniApp 小程序的同学们有所帮助。