whatsapp이 이것을 지원하지 않는다는 오래된 게시물을 발견했기 때문에 무언가가 변경되었는지, 의도를 통해 보내는 번호로 whatsapp '채팅'을 여는 방법이 있는지 궁금합니다.
whatsapp이 이것을 지원하지 않는다는 오래된 게시물을 발견했기 때문에 무언가가 변경되었는지, 의도를 통해 보내는 번호로 whatsapp '채팅'을 여는 방법이 있는지 궁금합니다.
답변:
업데이트 https://faq.whatsapp.com/en/android/26000030/?category=5245251 을 참조하십시오.
WhatsApp의 Click to Chat 기능을 사용하면 휴대 전화 주소록에 전화 번호를 저장하지 않고도 누군가와 채팅을 시작할 수 있습니다. 이 사람의 전화 번호를 아는 한, 그 사람과 채팅을 시작할 수있는 링크를 만들 수 있습니다.
사용 : https://wa.me/15551234567
사용하지 마십시오 : https://wa.me/+001-(555)1234567
예 : https://wa.me/15551234567?text=I 'm % 20interested % 20in % 20your % 20car % 20for % 20sale
원래 답변 여기에 해결책이 있습니다.
public void onClickWhatsApp(View view) {
PackageManager pm=getPackageManager();
try {
Intent waIntent = new Intent(Intent.ACTION_SEND);
waIntent.setType("text/plain");
String text = "YOUR TEXT HERE";
PackageInfo info=pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
//Check if package exists or not. If not then code
//in catch block will be called
waIntent.setPackage("com.whatsapp");
waIntent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(waIntent, "Share with"));
} catch (NameNotFoundException e) {
Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
.show();
}
}
이 코드를 사용하면 주어진 번호로 whatsapp 채팅을 열 수 있습니다.
void openWhatsappContact(String number) {
Uri uri = Uri.parse("smsto:" + number);
Intent i = new Intent(Intent.ACTION_SENDTO, uri);
i.setPackage("com.whatsapp");
startActivity(Intent.createChooser(i, ""));
}
startActivity(Intent.createChooser(i, ""));
사용 startActivity(i);
하는 대신 . 1. 삼성 J7 프라임에서 테스트가 작동하고 있습니다. 2. 내 연락처 목록에도 번호가 내 채팅 목록에도 없습니다. 3. 번호가 whatsapp을 사용하지 않는 경우 whatsapp에서 해당 연락처를 초대 할 것인지 묻는 대화 상자가 나타납니다. 앱 사용자에게 whatsapp 문의 지원을 제공하려는 경우 최상의 솔루션이라고 생각합니다.
다음 해결책을 찾았습니다. 먼저 whatsapp ID가 필요합니다.
여기에있는 다른 스레드와 다른 포럼의 보고서와 일치하는 로그인 이름은 일종의 일종의 것입니다. 0이없는 국제 지역 번호 또는 처음에 +가없는 국제 지역 코드 + 첫 번째가없는 전화 번호 + @ s.whatsapp.net
예를 들어 네덜란드에 거주하고 전화 번호가 0612325032 인 경우 0 또는 +가없는 네덜란드의 경우 31612325023@s.whatsapp.net-> +31이되고 0이없는 전화 번호가됩니다.
public void sendWhatsAppMessageTo(String whatsappid) {
Cursor c = getSherlockActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?",
new String[] { whatsappid }, null);
c.moveToFirst();
Intent whatsapp = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
c.close();
if (whatsapp != null) {
startActivity(whatsapp);
} else {
Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
.show();
//download for example after dialog
Uri uri = Uri.parse("market://details?id=com.whatsapp");
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
}
}
if (whatsapp != null)
당신이했던 두 줄 위에 아무 의미가 없습니다 Intent whatsapp = new Intent(...)
.
<uses-permission android:name="android.permission.READ_CONTACTS" />
에 권한을AndroidManifest.xml
Whatsapp 설치 여부에 관계없이 작동합니다.
boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp");
if (isWhatsappInstalled) {
Uri uri = Uri.parse("smsto:" + "98*********7")
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Hai Good Morning");
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
} else {
Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse("market://details?id=com.whatsapp");
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
startActivity(goToMarket);
}
private boolean whatsappInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
} catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed;
}
Marshmallow S5 에서 테스트되었으며 작동합니다!
Uri uri = Uri.parse("smsto:" + "phone number with country code");
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
이것은 사람과 직접 채팅을 할 것입니다. whatsapp이 설치되지 않은 경우 예외가 발생 합니다. whatsapp에 전화 번호가 알려지지 않은 경우 SMS 또는 간단한 SMS 메시지를 통해 초대를 보내도록 제안합니다.
다음 코드는 Google Now 앱에서 사용되며 다른 애플리케이션에서는 작동하지 않습니다.
WhatsApp이 Google을 제외한 다른 개발자가 직접 메시지를 보내는 것을 허용하지 않기 때문에이 게시물을 작성하고 있습니다.
그리고 저는 다른 프리랜서 개발자들에게 이런 종류의 협력이 진행되고 있다는 사실을 알고 싶습니다. 구글은 "누구에게나 개방적"이라고 계속 이야기하고 있으며 WhatsApp은 개발자에게 어떠한 액세스도 제공하고 싶지 않다고 말합니다.
최근 WhatsApp은 다음과 같은 Google Now 전용 인 텐트를 추가했습니다.
Intent intent = new Intent("com.google.android.voicesearch.SEND_MESSAGE_TO_CONTACTS");
intent.setPackage("com.whatsapp");
intent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.VoiceMessagingActivity"));
intent.putExtra("com.google.android.voicesearch.extra.RECIPIENT_CONTACT_CHAT_ID", number);
intent.putExtra("android.intent.extra.TEXT", text);
intent.putExtra("search_action_token", ?????);
또한 "search_action_token"이 IBinder-Object를 포함하는 PendingIntent라는 것을 알 수 있습니다. IBinder-Object는 Google 앱으로 다시 전송되고 Google Now에서 생성되었는지 확인합니다.
그렇지 않으면 WhatsApp이 메시지를 수락하지 않습니다.
현재 귀하가 요청할 수 있는 유일한 공식 APIGET
:
https://api.whatsapp.com/send?phone=919773207706&text=Hello
//NOTE : please use with country code first 2digits without plus signed
try {
String mobile = "911234567890";
String msg = "Its Working";
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://api.whatsapp.com/send?phone=" + mobile + "&text=" + msg)));
}catch (Exception e){
//whatsapp app not install
}
이것은 나에게 효과적입니다.
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES);
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName,
ri.activityInfo.name));
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, element);
} catch (NameNotFoundException e) {
ToastHelper.MakeShortText("Whatsapp have not been installed.");
}
이것은 매우 길지만 확실히 작동합니다. 코드 즐기기 :)
//method used to show IMs
private void show_custom_chooser(String value) {
List<ResolveInfo> list = null;
final Intent email = new Intent(Intent.ACTION_SEND);
email.setData(Uri.parse("sms:"));
email.putExtra(Intent.EXTRA_TEXT, "" + value);
email.setType("text/plain"); // vnd.android-dir/mms-sms
WindowManager.LayoutParams WMLP = dialogCustomChooser.getWindow()
.getAttributes();
WMLP.gravity = Gravity.CENTER;
dialogCustomChooser.getWindow().setAttributes(WMLP);
dialogCustomChooser.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialogCustomChooser.setCanceledOnTouchOutside(true);
dialogCustomChooser.setContentView(R.layout.about_dialog);
dialogCustomChooser.setCancelable(true);
ListView lvOfIms = (ListView) dialogCustomChooser
.findViewById(R.id.listView1);
PackageManager pm = getPackageManager();
List<ResolveInfo> launchables = pm.queryIntentActivities(email, 0);
// ////////////new
list = new ArrayList<ResolveInfo>();
for (int i = 0; i < launchables.size(); i++) {
String string = launchables.get(i).toString();
Log.d("heh", string);
//check only messangers
if (string.contains("whatsapp")) {
list.add(launchables.get(i));
}
}
Collections.sort(list, new ResolveInfo.DisplayNameComparator(pm));
int size = launchables.size();
adapter = new AppAdapter(pm, list, MainActivity.this);
lvOfIms.setAdapter(adapter);
lvOfIms.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
ResolveInfo launchable = adapter.getItem(position);
ActivityInfo activity = launchable.activityInfo;
ComponentName name = new ComponentName(
activity.applicationInfo.packageName, activity.name);
email.addCategory(Intent.CATEGORY_LAUNCHER);
email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
email.setComponent(name);
startActivity(email);
dialogCustomChooser.dismiss();
}
});
dialogCustomChooser.show();
}
나는 여기에 정말 늦었지만 요즘 WhatsApp을 통해 메시지를 보내는 더 짧고 더 나은 솔루션이 있다고 믿습니다.
다음을 사용하여 시스템 선택기를 호출 한 다음 원하는 것을 공유하는 데 사용할 앱을 선택할 수 있습니다.
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);
WhatsApp을 통해 전송해야하는 경우 다음 만 수행하면됩니다 (시스템 선택기를 건너 뜁니다).
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
// Put this line here
sendIntent.setPackage("com.whatsapp");
//
startActivity(sendIntent);
더 많은 정보가 필요한 경우 여기에서 찾을 수 있습니다 : WhatsApp FAQ
private fun sendWhatsappMessage(phoneNumber:String, text:String) {
val url = if (Intent().setPackage("com.whatsapp").resolveActivity(packageManager) != null) {
"whatsapp://send?text=Hello&phone=$phoneNumber"
} else {
"https://api.whatsapp.com/send?phone=$phoneNumber&text=$text"
}
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(browserIntent)
}
이것은 이것을 달성하는 훨씬 쉬운 방법입니다. 이 코드는 whatsapp이 장치에 설치되어 있는지 확인합니다. 설치되어있는 경우 시스템 선택기를 우회하고 whatsapp의 연락처로 이동하여 채팅 텍스트를 미리 입력합니다. 설치되지 않은 경우 웹 브라우저에서 whatsapp 링크가 열립니다.
다음 형식의 URL을 사용하는 것이 좋습니다.
https://api.whatsapp.com/send?text=text
그런 다음 원하는 텍스트를 보내도록 할 수 있습니다. 전화 번호를 지정할 수도 있습니다.
https://api.whatsapp.com/send?text=text&phone=1234
할 수없는 것은 다음을 사용하는 것입니다.
https://wa.me/send?text=text
당신은 얻을 것입니다 ...
찾고있는 페이지를 찾을 수 없습니다.
wa.me
하지만 전화 번호와 문자를 모두 제공하면 작동합니다. 그러나 대부분의 경우 공유 링크를 만들려는 경우 사용자가 누군가를 선택하기를 원하기 때문에 전화 번호를 표시하고 싶지 않습니다. 이 경우 번호를 제공하지 않고 wa.me
URL로 사용 하면 모든 공유 링크가 실패합니다. 을 사용하십시오 app.whatsapp.com
.
이 코드를 확인하십시오.
public void share(String subject,String text) {
final Intent intent = new Intent(Intent.ACTION_SEND);
String score=1000;
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, score);
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(intent, getString(R.string.share)));
}
이것은 나에게 효과적입니다.
public static void shareWhatsApp(Activity appActivity, String texto) {
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, texto);
PackageManager pm = appActivity.getApplicationContext().getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(sendIntent, 0);
boolean temWhatsApp = false;
for (final ResolveInfo info : matches) {
if (info.activityInfo.packageName.startsWith("com.whatsapp")) {
final ComponentName name = new ComponentName(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
sendIntent.setComponent(name);
temWhatsApp = true;
break;
}
}
if(temWhatsApp) {
//abre whatsapp
appActivity.startActivity(sendIntent);
} else {
//alerta - você deve ter o whatsapp instalado
Toast.makeText(appActivity, appActivity.getString(R.string.share_whatsapp), Toast.LENGTH_SHORT).show();
}
}
메시지를 보낼 연락처 번호를 얻고 whatsapp에 대한 uri를 만듭니다. 여기서 c는 선택한 연락처를 반환하는 커서입니다.
Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
i.setType("text/plain");
i.setPackage("com.whatsapp"); // so that only Whatsapp reacts and not the chooser
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_TEXT, "I'm the body.");
startActivity(i);
로부터 문서
채팅 텍스트 필드에 자동으로 표시되는 미리 채워진 메시지로 자신 만의 링크를 만들려면 https://wa.me/whatsappphonenumber/?text=urlencodedtext를 사용 하세요. 여기서 whatsappphonenumber는 국제 형식 및 URL의 전체 전화 번호입니다. -encodedtext는 URL로 인코딩 된 미리 채워진 메시지입니다.
예 : https://wa.me/15551234567?text=I 'm % 20interested % 20in % 20your % 20car % 20for % 20sale
val phoneNumber = "13492838472"
val text = "Hey, you know... I love StackOverflow :)"
val uri = Uri.parse("https://wa.me/$phoneNumber/?text=$text")
val sendIntent = Intent(Intent.ACTION_VIEW, uri)
startActivity(sendIntent)
내 기사 에서 볼 수 있듯이 다음 API는 C ++에서 사용할 수 있습니다. .
몇 가지 상수를 정의해야합니다.
//
#define GroupAdmin <YOUR GROUP ADMIN MOBILE PHONE>
#define GroupName <YOUR GROUP NAME>
#define CLIENT_ID <YOUR CLIENT ID>
#define CLIENT_SECRET <YOUR CLIENT SECRET>
#define GROUP_API_SERVER L"api.whatsmate.net"
#define GROUP_API_PATH L"/v3/whatsapp/group/text/message/12"
#define IMAGE_SINGLE_API_URL L"http://api.whatsmate.net/v3/whatsapp/group/image/message/12"
//
그런 다음 API의 엔드 포인트에 연결합니다.
hOpenHandle = InternetOpen(_T("HTTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hOpenHandle == NULL)
{
return false;
}
hConnectHandle = InternetConnect(hOpenHandle,
GROUP_API_SERVER,
INTERNET_DEFAULT_HTTP_PORT,
NULL, NULL, INTERNET_SERVICE_HTTP,
0, 1);
if (hConnectHandle == NULL)
{
InternetCloseHandle(hOpenHandle);
return false;
}
그런 다음 헤더와 본문을 모두 보내고 "OK"가 필요한 결과를 기다립니다.
1 단계-HTTP 요청 열기 :
const wchar_t *AcceptTypes[] = { _T("application/json"),NULL };
HINTERNET hRequest = HttpOpenRequest(hConnectHandle, _T("POST"), GROUP_API_PATH, NULL, NULL, AcceptTypes, 0, 0);
if (hRequest == NULL)
{
InternetCloseHandle(hConnectHandle);
InternetCloseHandle(hOpenHandle);
return false;
}
2 단계-헤더 보내기 :
std::wstring HeaderData;
HeaderData += _T("X-WM-CLIENT-ID: ");
HeaderData += _T(CLIENT_ID);
HeaderData += _T("\r\nX-WM-CLIENT-SECRET: ");
HeaderData += _T(CLIENT_SECRET);
HeaderData += _T("\r\n");
HttpAddRequestHeaders(hRequest, HeaderData.c_str(), HeaderData.size(), NULL);
3 단계-메시지 보내기 :
std::wstring WJsonData;
WJsonData += _T("{");
WJsonData += _T("\"group_admin\":\"");
WJsonData += groupAdmin;
WJsonData += _T("\",");
WJsonData += _T("\"group_name\":\"");
WJsonData += groupName;
WJsonData += _T("\",");
WJsonData += _T("\"message\":\"");
WJsonData += message;
WJsonData += _T("\"");
WJsonData += _T("}");
const std::string JsonData(WJsonData.begin(), WJsonData.end());
bResults = HttpSendRequest(hRequest, NULL, 0, (LPVOID)(JsonData.c_str()), JsonData.size());
이제 결과를 확인하십시오.
TCHAR StatusText[BUFFER_LENGTH] = { 0 };
DWORD StatusTextLen = BUFFER_LENGTH;
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_TEXT, &StatusText, &StatusTextLen, NULL);
bResults = (StatusTextLen && wcscmp(StatusText, L"OK")==FALSE);