二维码插件
功能介绍
二维码插件为您的应用程序提供完整的二维码操作功能,包括以下能力:
- 启动二维码扫描器
- 显示自定义内容的二维码图片
- 自定义二维码中心图标
- 设置二维码位置标记颜色
二维码扫描器界面主要包含三个部分:
- 我的二维码:生成并展示携带个人信息的二维码。
- 相册:从系统相册中选择二维码图片进行识别。
- 轻触照亮:在光线不足时,开启设备手电筒以辅助扫描。
note
在 iOS 14.0+ 和 Android 14+ 的设备上,如果应用访问系统相册受到限制,点击 相册 后仅显示用户授权访问的照片。下图为受限访问的相册界面:

前提条件
2. iOS 配置
caution
对于使用 Unity 的 iOS 应用,实现二维码插件功能前请先完成 Game Center 的配置。
在项目的 Info.plist 文件中添加以下键值对:
-
UISupportsRightToLeft:启用从右到左语言支持。 -
CFBundleAllowMixedLocalizations:允许应用使用混合语言本地化。 -
PHPhotoLibraryPreventAutomaticLimitedAccessAlert:防止弹出“有限照片访问”提示。 -
NSPhotoLibraryUsageDescription:说明应用访问照片库的原因。 -
NSCameraUsageDescription:说明应用使用相机的原因<plist version="1.0">
<dict>
<key>UISupportsRightToLeft</key>
<true/>
<key>CFBundleAllowMixedLocalizations</key>
<true/>
<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
<true/>
<key>NSPhotoLibraryUsageDescription</key>
<string>本应用需要访问您的照片库以便上传和分享照片。</string>
<key>NSCameraUsageDescription</key>
<string>本应用需要访问您的相机以拍摄照片或视频,用于个人资料或内容发布。</string>
</dict>
</plist>
注册回调函数
添加以下回调处理:
- Unity
- Unreal Engine
// 添加回调函数
public void AddQRCodeObserver()
{
INTLAPI.AddQRCodeResultObserver(OnQRCodeResultEvent);
}
// 移除回调函数
public void RemoveQRCodeObserver()
{
INTLAPI.RemoveQRCodeResultObserver(OnQRCodeResultEvent);
}
// 处理 INTLQRCodeResult 回调事件
private void OnQRCodeResultEvent(INTLQRCodeResult qrCodeRet)
{
Debug.Log("OnQRCodeResultEvent");
string methodTag = "";
if (qrCodeRet.MethodId == (int)INTLMethodID.INTL_QRCODE_OPEN_SCANNER)
{
methodTag = "OpenQRScanner";
}
else if (qrCodeRet.MethodId == (int)INTLMethodID.INTL_QRCODE_SHOW)
{
methodTag = "ShowQRCode";
}
else if (qrCodeRet.MethodId == (int)INTLMethodID.INTL_QRCODE_SET_ICON)
{
methodTag = "SetIcon";
}
else if (qrCodeRet.MethodId == (int)INTLMethodID.INTL_QRCODE_SET_POSITION_MARKER_COLOR)
{
methodTag = "SetPositionMarkerColor";
}
}
// 添加回调函数
FINTLQRCodeEvent QRCodeEvent;
QRCodeEvent.AddUObject(this, &UQRCodeWindow::OnQRCodeResult_Implementation);
UINTLSDKAPI::SetQRCodeResultObserver(QRCodeEvent);
// 移除回调函数
UINTLSDKAPI::GetQRCodeResultObserver().Clear();
// 处理 FINTLQRCodeResult 回调事件
void UQRCodeWindow::OnQRCodeResult_Implementation(FINTLQRCodeResult qrCodeRet)
{
UE_LOG(LogTemp, Log, TEXT("==== OnQRCodeResultEvent"));
FString methodTag;
if (qrCodeRet.MethodId == INTL_QRCODE_OPEN_SCANNER)
{
methodTag = TEXT("OpenQRScanner");
}
else if (qrCodeRet.MethodId == INTL_QRCODE_SHOW)
{
methodTag = TEXT("ShowQRCode");
}
else if (qrCodeRet.MethodId == INTL_QRCODE_SET_ICON)
{
methodTag = TEXT("SetIcon");
}
else if (qrCodeRet.MethodId == INTL_QRCODE_SET_POSITION_MARKER_COLOR)
{
methodTag = TEXT("SetPositionMarkerColor");
}
}
OpenQRScanner
根据指定参数打开二维码扫描器。
qrCodeContent:包含生成二维码所需信息的 JSON 字符串,可根据需求进行自定义
- Unity
- Unreal Engine
string qrCodeContent = "{\
\"deeplink\": \"https://example.com/path\", \
\"openid\": \"user-12345\", \
\"additionalKey1\": \"value1\"\
}";
INTLAPI.OpenQRScanner(qrCodeContent);
FString qrCodeContent = TEXT("{\"deeplink\":\"https://example.com/path\", "
"\"openid\":\"user-12345\", "
"\"additionalKey1\":\"value1\"}");
UINTLSDKAPI::OpenQRScanner(qrCodeContent);
ShowQRCode
显示指定的二维码内容。默认二维码的样式在不同平台上的表现略有不同。
qrCodeContent:包含生成二维码所需信息的 JSON 字符串,可根据游戏需求进行自定义
- Unity
- Unreal Engine
string qrCodeContent = "{\
\"deeplink\": \"https://example.com/path\", \
\"openid\": \"user-12345\", \
\"additionalKey1\": \"value1\"\
}";
INTLAPI.ShowQRCode(qrCodeContent);
FString qrCodeContent = TEXT("{\"deeplink\":\"https://example.com/path\", "
"\"openid\":\"user-12345\", "
"\"additionalKey1\":\"value1\"}");
UINTLSDKAPI::ShowQRCode(qrCodeContent);
Android 系统默认二维码展示:
iOS 系统默认二维码展示:
SetIcon
设置二维码中的自定义图标。
imageURL:图标 URL
- Unity
- Unreal Engine
string imageURL = "https://example.com/icon.png";
INTLAPI.SetIcon(imageURL);
FString imageURL = TEXT("https://example.com/icon.png");
UINTLSDKAPI::SetIcon(imageURL);
SetPositionMarkerColor
设置二维码的位置标记颜色。
hexCode:定位点颜色的十六进制字符串,如#FF5733
- Unity
- Unreal Engine
string hexCode = "#FF5733";
INTLAPI.SetPositionMarkerColor(hexCode);
FString hexCode = TEXT("#FF5733");
UINTLSDKAPI::SetPositionMarkerColor(hexCode);
