Features
- 基于高德的定位打卡能力,支持内勤/外勤场景
- 静默自动打卡:ClockInManager + LocationService 支持无 UI 检测与自动提交
- 自动打卡时间窗口:AutoClockTimeWindow 可配置上/下班容差时间
- 成功回调:onSilentClockSuccess 可用于推送通知、刷新宿主 UI
- 日历体验:记录页支持点击标题选择月份,非当月显示“返回今天”按钮
- 国际化扩展:新增静默打卡相关提示文案,可选自定义“选择月份”标题
快速上手
配置基础能力
JunnyPunchBasicConfig(
autoClockTimeWindow: const AutoClockTimeWindow(
clockInBeforeMinutes: 30,
clockInAfterMinutes: 60,
clockOutBeforeMinutes: 0,
clockOutAfterMinutes: 120,
),
onSilentClockSuccess: (SilentClockResult result) {
// 发送本地通知或刷新宿主页面
},
);
静默打卡/定位服务均已通过 lib/junny_location_punch.dart 导出:
import 'package:junny_location_punch/junny_location_punch.dart';
final check = await ClockInManager.instance.checkStatus();
if (check.result.isSuccess) {
final autoResult = await ClockInManager.instance.silentAutoClock();
if (!autoResult.success) {
final message = autoResult.failReason?.getLocalizedMessage(context);
// 处理失败提示
}
}
国际化字段(新增)
JunnyPunchLocalizationConfig(
selectMonth: ([context]) => '选择月份',
silentAlreadyClockedTips: ([context]) => '今日已完成打卡',
silentAutoClockFailedTips: ([context]) => '自动打卡失败',
silentAutoClockSuccessTips: ([context]) => '自动打卡成功',
silentCheckStatusFailedTips: ([context]) => '检测打卡状态失败',
silentLocationUnavailableTips: ([context]) => '定位服务不可用',
silentNoAttendancePermissionTips: ([context]) => '暂无考勤权限',
silentNotWorkdayTips: ([context]) => '今日非工作日',
silentOutsideRangeTips: ([context]) => '当前位置不在打卡范围内',
silentOutsideTimeWindowTips: ([context]) => '当前时间不在打卡时间范围内',
silentPermissionDeniedTips: ([context]) => '定位权限未授权,请手动打卡',
// 其余必填字段保持原有实现
);
Getting started
Android
android/src/main/AndroidManifest.xml添加以下内容 具体参考example
<manifest>
<application>
/// 需要配置的
<meta-data android:name="com.amap.api.v2.apikey" android:value="您的Key" />
</application>
</manifest>
iOS
- 在info.plist中增加:
<key>NSLocationWhenInUseUsageDescription</key>
<string>要用定位</string>
如果ios定位没有返回逆地理信息,添加一下内容
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsForMedia</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
/// 解决ios HTTP 警告,需要添加的
<key>NSExceptionDomains</key>
<dict>
<key>restios.amap.com/key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
</dict>
</dict>
</dict>
- iOS 9及以上版本使用后台定位功能, 需要保证"Background Modes"中的"Location updates"处于选中状态
3.使用地理围栏
iOS14及以上版本使用地理围栏功能,需要在plist中配置NSLocationTemporaryUsageDescriptionDictionary字典描述, 且添加自定义Key描述地理围栏的使用场景,此描述会在申请临时精确定位权限的弹窗中展示。 该回调触发条件:拥有定位权限,但是没有获得精确定位权限的情况下,会触发该回调。此方法实现调用申请临时精确定位权限API即可;
** 需要注意,在iOS9及之后版本的系统中,如果您希望程序在后台持续检测围栏触发行为,需要保证manager的 allowsBackgroundLocationUpdates 为 YES, 设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。