private val fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_READ)
.build()
private val googleSignInLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
Log.d("debug1", "Result code: ${result.resultCode}")
Log.d("debug1", "Data: ${result.data}")
when (result.resultCode) {
RESULT_OK -> {
try {
val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
val account = task.getResult(ApiException::class.java)
Log.d("debug1", "Google Sign-In successful. Email: ${account.email}")
accessGoogleFit()
} catch (e: ApiException) {
Log.e("debug1", "Google Sign-In failed. Status code: ${e.statusCode}", e)
// Show error to user
//Toast.makeText(this, "Google Sign-In failed: ${e.message}", Toast.LENGTH_LONG).show()
}
}
RESULT_CANCELED -> {
Log.e("debug1", "Google Sign-In was canceled by user")
//Toast.makeText(this, "Sign-in canceled", Toast.LENGTH_SHORT).show()
}
else -> {
Log.e("debug1", "Google Sign-In failed with result code: ${result.resultCode}")
//Toast.makeText(this, "Sign-in failed", Toast.LENGTH_SHORT).show()
}
}
}
private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
if (isGranted) {
accessGoogleFit()
} else {
Log.e("debug1", "Body sensors permission denied")
}
}
private fun checkPermissionsAndAccessGoogleFit() {
Log.d("debug1", "Checking BODY_SENSORS permission")
if (ContextCompat.checkSelfPermission(this, Manifest.permission.BODY_SENSORS) == PackageManager.PERMISSION_GRANTED) {
Log.d("debug1", "Permission granted")
accessGoogleFit()
} else {
Log.d("debug1", "Permission not granted")
requestPermissionLauncher.launch(Manifest.permission.BODY_SENSORS)
}
}
private fun accessGoogleFit() {
Log.d("debug1", "accessGoogleFit")
val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)
if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
Log.d("debug1", "Requesting Google Sign-In")
val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail() // 이메일 권한 추가
.requestScopes(Scope("https://www.googleapis.com/auth/fitness.activity.read"))
.requestScopes(Scope("https://www.googleapis.com/auth/fitness.body.read"))
.requestScopes(Scope("https://www.googleapis.com/auth/fitness.heart_rate.read"))
.build()
try {
val googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions)
googleSignInLauncher.launch(googleSignInClient.signInIntent)
} catch (e: Exception) {
Log.e("debug1", "Error launching sign-in", e)
//Toast.makeText(this, "Error launching sign-in: ${e.message}", Toast.LENGTH_LONG).show()
}
} else {
Log.d("debug1", "Google Sign-In permissions already granted")
subscribeToHeartRateData()
}
}
private fun subscribeToHeartRateData() {
Fitness.getRecordingClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
.subscribe(DataType.TYPE_HEART_RATE_BPM)
.addOnSuccessListener {
Log.i("debug1", "Successfully subscribed to heart rate data")
readHeartRateData()
}
.addOnFailureListener { e ->
Log.e("debug1", "Failed to subscribe to heart rate data", e)
}
}
….. readHeartRateData ….
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
….
checkPermissionsAndAccessGoogleFit()
}
Checking BODY_SENSORS permission
Permission granted
accessGoogleFit
Requesting Google Sign-In
——> 여기서 워치에서 메일계정 로그인
Result code: 0
Data: Intent { (has extras) }
Google Sign-In was canceled by user
이렇게 실패가 떨어집니다.
오늘
Google Fit API가 활성화 했고요 .
월래 앱에서는 구글로그인을 사용하고 있었습니다.
app / wear os app - 의 패키징을 동일하게 처리했습니다.
혹시 제가 빠트린 부분이 있을까요?
조언 구합니다.