Dev*_*rma 17 android google-api google-api-client googlesigninapi sms-retriever-api
我正在尝试实现 SMS Retriever API 以进行 SMS 验证。文档中提到的官方方式说GoogleApiClient与HintRequest从设备检索手机号码一起使用
HintRequest hintRequest = new HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build();
PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
googleApiClient, hintRequest);
try {
startIntentSenderForResult(intent.getIntentSender(),
RESOLVE_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但是GoogleAPIClient已弃用并由GoogleApi接口代替,例如GoogleSignInClient. 我尝试使用GoogleSignInClient但getHintPickerIntent不接受。即使在被弃用后使用旧 API 是否安全,或者有没有办法将后者与 SMSRetriver API 一起使用?
Chr*_*ull 30
要删除已弃用的GoogleApiClient,请将您的意图替换为以下内容:
// Kotlin
val intent = Credentials.getClient(this).getHintPickerIntent(hintRequest)
Run Code Online (Sandbox Code Playgroud)
// Java
PendingIntent intent = Credentials.getClient(this).getHintPickerIntent(hintRequest);
Run Code Online (Sandbox Code Playgroud)
Credentials在这个包中找到:com.google.android.gms.auth.api.credentials.Credentials。
buttonClicked按下按钮时调用的完整工作示例:
// Kotlin
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.auth.api.credentials.Credential
import com.google.android.gms.auth.api.credentials.Credentials
import com.google.android.gms.auth.api.credentials.CredentialsApi
import com.google.android.gms.auth.api.credentials.HintRequest
class MyActivity : AppCompatActivity() {
// ... onCreate Functions, etc
// Arbitrary number to identify the request for crednetials
private val iRequestCodePhoneNumber = 100
// Button click listener
fun buttonClicked(@Suppress("UNUSED_PARAMETER") view: View) {
val hintRequest = HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build()
val intent = Credentials.getClient(this).getHintPickerIntent(hintRequest)
startIntentSenderForResult(
intent.intentSender,
iRequestCodePhoneNumber, null, 0, 0, 0
)
}
// Parse the result of the HintPicker (i.e., get the selected phone number)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// resultCode:
// Activity.RESULT_OK (-1) = number selected
// Activity.RESULT_CANCELED (0) = user touched outside the HintPicker (do nothing)
// CredentialsApi.ACTIVITY_RESULT_OTHER_ACCOUNT (1001) = "None of the above" (do nothing; treat as same use case as 'Cancelling')
// CredentialsApi.ACTIVITY_RESULT_NO_HINTS_AVAILABLE (1002) = no numbers found, probably no SIM card
if (requestCode == iRequestCodePhoneNumber && resultCode == Activity.RESULT_OK) {
val credential: Credential? = data?.getParcelableExtra(Credential.EXTRA_KEY)
val phoneNumber = credential?.id
// *** Do something with the phone number here ***
} else if (
requestCode == iRequestCodePhoneNumber &&
resultCode == CredentialsApi.ACTIVITY_RESULT_NO_HINTS_AVAILABLE
) {
// *** No phone numbers available ***
Toast.makeText(this, "No phone numbers found", Toast.LENGTH_LONG).show()
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将生成一个像这样的弹出窗口:
| 归档时间: |
|
| 查看次数: |
2744 次 |
| 最近记录: |