请注意,如果您要发送具有一键自动填充按钮的身份验证模板,则必须首先在您的应用和 WhatsApp Messenger 或 WhatsApp Business 之间发起握手。请参阅下面的握手。
握手
如果您的任何身份验证模板使用一键自动填充按钮,则您的应用必须能够启动“握手”。
握手是您实现的 Android 意图和公共类,但我们可以从 WhatsApp 应用程序或 WhatsApp Business 应用程序开始。
当您应用中的用户请求一次性密码或验证码并选择将其发送到他们的 WhatsApp 号码时,首先进行握手,然后调用我们的 API 发送身份验证模板消息。当 WhatsApp 应用或 WhatsApp Business 应用收到该消息时,它将执行资格检查,如果没有错误,则启动意图并向用户显示该消息。最后,当用户点击消息的一键自动填充按钮时,我们会自动加载您的应用并向其传递密码或代码。
这是 WhatsApp 应用程序或 WhatsApp Business 应用程序在收到身份验证模板消息并通过所有资格检查后将启动的活动。
公开课
定义可以在将代码传递到您的应用程序后接受该代码的活动公共类。
public class ReceiveCodeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
// retrieve PendingIntent from extras bundle
PendingIntent pendingIntent = intent.getParcelableExtra("_ci_");
// verify source of the pendingIntent
String pendingIntentCreatorPackage = pendingIntent.getCreatorPackage();
// check if creatorPackage is "com.whatsapp" -> WA consumer app Or
// "com.whatsapp.w4b" -> WA business app
if ("com.whatsapp".equals(creatorPackage) || "com.whatsapp.w4b".equals(creatorPackage)) {
// use OTP code
String otpCode = intent.getStringExtra("code");
}
}
}
发起握手
此示例演示了使用 WhatsApp 应用程序或 WhatsApp Business 应用程序发起握手的一种方法。
public void sendOtpIntentToWhatsApp() {
// Send OTP_REQUESTED intent to both WA and WA Business App
sendOtpIntentToWhatsApp("com.whatsapp");
sendOtpIntentToWhatsApp("com.whatsapp.w4b");
}
private void sendOtpIntentToWhatsApp(String packageName) {
/**
* Starting with Build.VERSION_CODES.S, it will be required to explicitly
* specify the mutability of PendingIntents on creation with either
* (@link #FLAG_IMMUTABLE} or FLAG_MUTABLE
*/
int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? FLAG_IMMUTABLE : 0;
PendingIntent pi = PendingIntent.getActivity(
getApplicationContext(),
0,
new Intent(),
flags);
// Send OTP_REQUESTED intent to WhatsApp
Intent intentToWhatsApp = new Intent();
intentToWhatsApp.setPackage(packageName);
intentToWhatsApp.setAction("com.whatsapp.otp.OTP_REQUESTED");
// WA will use this to verify the identity of the caller app.
Bundle extras = intentToWhatsApp.getExtras();
if (extras == null) {
extras = new Bundle();
}
extras.putParcelable("_ci_", pi);
intentToWhatsApp.putExtras(extras);
getApplicationContext().sendBroadcast(intentToWhatsApp);
}