私はAndroidプロジェクトを持っています。私はGradleとKotlinを使用します。
TwilioでSMS送信メカニズムを実現する必要があります。私はこのマニュアルを使用TwilioとAndroidでSMSを送信する
:How to Send an SMS from Android
をだから、私は、バックエンドを作成しました。
はここでバックエンドのためのbuild.gradle
です:
group 'com.my.app'
version '1.0-SNAPSHOT'
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
}
}
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
sourceCompatibility = 1.8
mainClassName = 'SMSBackend'
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation 'com.sparkjava:spark-core:2.6.0'
implementation group: 'com.twilio.sdk', name: 'twilio', version: '7.9.0'
implementation 'org.slf4j:slf4j-simple:1.6.1'
}
そして、ここでの主な活動である - その後SMSBackend.java
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.rest.api.v2010.account.MessageCreator;
import com.twilio.type.PhoneNumber;
import static spark.Spark.*;
import static spark.Spark.get;
import static spark.Spark.post;
public class SMSBackend {
public static void main(String[] args) {
get("/", (req, res) -> "Hello, World!");
TwilioRestClient client = new TwilioRestClient.Builder(System.getenv("AC749....d462247b104a"), System.getenv("096e4788......ed95cc36c")).build();
post("/sms", (req, res) -> {
String body = req.queryParams("Body");
String to = req.queryParams("To");
String from = "+15037381694";
Message message = new MessageCreator(
new PhoneNumber(to),
new PhoneNumber(from),
body).create(client);
return message.getSid();
});
}
}
、私はこのアプリは、外部から利用できるようになるためにngrokを使用しています。
私は、コマンドを入力します。
ngrok http 4567
を、以下のリンクとして出力を持っている:
そして今、私は私のAndroidアプリケーションにアクセスしてください。電話番号を入力し、ボタンをクリックしてからSMSを受信する必要があります。
このため、私はngrok
から私の活動にリンクを張りました。だから、
マイMyActivity.kt
package com.my.app
import android.content.Context
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
class MyActivity : AppCompatActivity() {
private val mClient = OkHttpClient()
private val mContext = getApplicationContext()
private val message = resources.getString(R.string.textSMS)
private val userPhoneNumber = findViewById(R.id.editText) as EditText
private val buttonSend = findViewById(R.id.button) as Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
buttonSend.setOnClickListener {
post(("https://2b722554.ngrok.io/sms"), object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
@Throws(IOException::class)
override fun onResponse(call: Call, response: Response) {
runOnUiThread(object : Runnable {
public override fun run() {
userPhoneNumber.setText("")
message.setText("")
Toast.makeText(applicationContext, "SMS Sent!", Toast.LENGTH_SHORT).show()
}
})
}
})
}
}
@Throws(IOException::class)
internal fun post(url: String, callback: Callback): Call {
val formBody = FormBody.Builder()
.add("To", userPhoneNumber.getText().toString())
.add("Body", message.getText().toString())
.build()
val request = Request.Builder()
.url(url)
.post(formBody)
.build()
val response = mClient.newCall(request)
response.enqueue(callback)
return response
}
私はエミュレータまたは実際のデバイス上で自分のアプリケーションを実行すると、私は番号を入力することができますが、ボタンが機能していません。
しかし、TwilioサイトからSMSを送受信できるので、Twilio番号はOkです。
私には何が欠けていますか?
UPD。私はすべてのコットラインコードを変更しました。今、私のアプリケーションは、あなたがbutton
に追加]をクリックしますリスナを見るとエミュレータまたは実際のデバイス
はどこsendSMS()関数を呼び出していますか? –