launchApp
Khởi chạy app với option cấu hình quyền và xoá trạng thái.
Mở một app trên device đích (Android hoặc iOS). Mặc định, command này dừng app đang chạy trước khi mở lại.
Tham số
Command launchApp nhận các tham số sau trong một map:
| Parameter | Mô tả |
|---|---|
appId | Không bắt buộc. Package name (Android) hoặc bundle ID (iOS) của app cần mở. Nếu không chỉ định, Astra Scout mở app đang test bằng appId khai báo ở đầu file YAML. |
clearState | Không bắt buộc. Nếu true, xoá trạng thái của app trước khi mở. |
clearKeychain | Không bắt buộc. Nếu true, xoá toàn bộ iOS Keychain. |
stopApp | Không bắt buộc. Nếu false, command đưa app đang chạy nền lên foreground mà không khởi động lại. Mặc định true. |
permissions | Không bắt buộc. Map các quyền cần cấp, từ chối hoặc bỏ đặt. Mặc định tất cả quyền đều được cho phép. |
arguments | Không bắt buộc. Map các cặp key-value truyền cho app dưới dạng launch argument. Hỗ trợ giá trị string, boolean, double và integer. |
Ví dụ sử dụng
Mở một app
Để mở app đang test:
- launchAppĐể mở một app khác theo ID:
- launchApp: com.example.appMở với trạng thái sạch
Để xoá toàn bộ dữ liệu app trước khi mở, dùng clearState: true:
- launchApp:
appId: "com.example.app"
clearState: true
clearKeychain: true # Tùy chọnQuản lý app đang chạy
Để đưa app đang chạy nền lên foreground mà không khởi động lại:
- launchApp:
stopApp: falseĐể khởi động lại app đang chạy, chạy launchApp không tham số, vì stopApp mặc định là true:
- launchAppĐặt quyền khi mở app
Để từ chối tất cả quyền:
- launchApp:
permissions:
all: denyĐể đặt các quyền cụ thể, thêm từng quyền riêng:
- launchApp:
permissions:
notifications: unset
android.permission.ACCESS_FINE_LOCATION: denyTruyền launch argument
Ví dụ này truyền các argument thuộc nhiều kiểu khác nhau cho app khi mở.
- launchApp:
appId: "com.example.app"
arguments:
foo: "This is a string"
isFooEnabled: false
fooValue: 3.24
fooInt: 3Nhận launch argument
Các ví dụ sau cho thấy cách nhận các argument được truyền bằng command launchApp trong code app của bạn.
Android
intent.extras?.getBoolean("isFooEnabled")?.let {
// Do something with isFooEnabled
}
intent.extras?.getString("foo")?.let {
// Do something with foo
}iOS
if ProcessInfo.processInfo.arguments.contains("-isFooEnabled") {
// Do something with isFooEnabled
}
// By default all the values received here would be string
let standardDefaultsDict = UserDefaults.standard.dictionaryRepresentation()
let foo = (standardDefaultsDict["foo"] as? String) ?? "defaultValue"React Native
import { LaunchArguments } from 'react-native-launch-arguments'
export const isFooEnabled = () => {
try {
const foo = LaunchArguments.value().isFooEnabled
return !!foo
} catch (e) {
return false
}
}Flutter
import 'package:flutter_launch_arguments/flutter_launch_arguments.dart';
Future<void> getArguments() async {
final fla = FlutterLaunchArguments();
final foo = await fla.getString('foo');
final isFooEnabled = await fla.getBool('isFooEnabled');
final fooValue = await fla.getDouble('fooValue');
final fooInt = await fla.getInt('fooInt');
}Nội dung liên quan
Tìm hiểu cách dùng permissions trên app iOS và Android trong flow.
