Как интегрировать Twilio в Android

0

Я пытаюсь запустить Twilio Android Quickstart, и я дошел до конца раздела "Исходящий звонок" на Java, но по какой-то причине. Я не добился успеха в Android.

Я также создал php Api для токена, но этот токен не дает мне кода возможностей. Этот api находится на нашем локальном сервере, то есть localhost.

Я также даю исходный код моего проекта.

public class MonkeyPhone implements Twilio.InitListener, DeviceListener,
    ConnectionListener {
private static final String TAG = "MonkeyPhone";
private Device device;
private Connection connection;
private final Context context;
private BasicConnectionListener basicConnectionListener;
private BasicDeviceListener basicDeviceListener;
private Connection pendingIncomingConnection;
InputMethodManager imm;
private boolean speakerEnabled;
private boolean muteEnabled;
static String capabilityToken;
public static final String ACCOUNT_SID = "XXXXXXXXXXXXXXXXXXXXXX";
public static final String AUTH_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXX";

public interface BasicConnectionListener {
    public void onIncomingConnectionDisconnected();

    public void onConnectionConnecting();

    public void onConnectionConnected();

    public void onConnectionFailedConnecting(Exception error);

    public void onConnectionDisconnecting();

    public void onConnectionDisconnected();

    public void onConnectionFailed(Exception error);
}

 public interface BasicDeviceListener {
    public void onDeviceStartedListening();

    public void onDeviceStoppedListening(Exception error);
 }

public MonkeyPhone(Context context) {
    this.context = context;
    Twilio.initialize(context, this /* Twilio.InitListener */);
}

public void setListeners(BasicConnectionListener basicConnectionListener,
        BasicDeviceListener basicDeviceListener) {
    this.basicConnectionListener = basicConnectionListener;
    this.basicDeviceListener = basicDeviceListener;
}

/* Twilio.InitListener method */
@Override
public void onInitialized() {
    Log.d(TAG, "Twilio SDK is ready");
    try {
        // String capabilityToken =
        // HttpHelper.httpGet("http://------/mobile/auth.php");
         //capabilityToken = HttpHelper.httpGet("http:------/auth.php");
        capabilityToken = HttpHelper
                .httpGet("http://www.companyfoo.com/XXXXXXXXXXXXXXXXXXXXXXX");
        System.out.println(capabilityToken);
        device = Twilio
                .createDevice(capabilityToken, null /* DeviceListener */);
    } catch (Exception e) {
        Log.e(TAG,
                "Failed to obtain capability token: "
                        + e.getLocalizedMessage());
    }
}
/* Twilio.InitListener method */
@Override
public void onError(Exception e) {
    Log.e(TAG, "Twilio SDK couldn't start: " + e.getLocalizedMessage());
}
@Override
protected void finalize() {
    if (device != null)
        device.release();
    if (connection != null)
        connection.disconnect();
}
// To Make Calls
public void connect(String phoneNumber) {
    Toast toast = Toast.makeText(context, "Dialing...", Toast.LENGTH_LONG);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
    Map<String, String> parameters = new HashMap<String, String>();
    parameters.put("PhoneNumber", phoneNumber);
     connection = device.connect(parameters, null /* ConnectionListener */);
        if (connection == null)
        {
            Log.w(TAG, "Failed to create new connection");
        // TODO Auto-generated method stub
        }
    try 
    {
        // capabilityToken =
        // HttpHelper.httpGet("http://------/mobile/auth.php");
     //         capabilityToken = HttpHelper
    //  .httpGet("https://api.twilio.com/2010-04-     01/Accounts/XXXXXXXXXXXXXXXXX/Calls.json");
        //device = Twilio.createDevice(capabilityToken, null /* DeviceListener */);
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    try {
        device.disconnectAll();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
// To Disconnect Phone
public void disconnect() {
    Toast toast = Toast.makeText(context, "Call Disconnected...",
            Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
    if (connection != null) {
        connection.disconnect();
        connection = null; 

        if (basicConnectionListener != null)
            basicConnectionListener.onConnectionDisconnecting();
    }
}
public void setSpeakerEnabled(boolean speakerEnabled) {
    if (speakerEnabled != this.speakerEnabled) {
        this.speakerEnabled = speakerEnabled;
        updateAudioRoute();
    }
}
private void updateAudioRoute() {
    AudioManager audioManager = (AudioManager) context
            .getSystemService(Context.AUDIO_SERVICE);
    audioManager.setSpeakerphoneOn(speakerEnabled);
}
public void setMuteEnabled(boolean muteEnabled) {
    if (muteEnabled != this.muteEnabled) {
        this.muteEnabled = muteEnabled;
        updateAudioRouteForMute();
    }
}
private void updateAudioRouteForMute() {
    AudioManager audioManager = (AudioManager) context
            .getSystemService(Context.AUDIO_SERVICE);
    audioManager.setMicrophoneMute(muteEnabled);
}
public State status() {
    connection.getState();
    State statusHere = connection.getState();
    return statusHere;
}
@Override
public void onConnected(Connection arg0) {
    updateAudioRoute();
    updateAudioRouteForMute();
    if (basicConnectionListener != null) {
        basicConnectionListener.onConnectionConnected();
    }
}
@Override
public void onConnecting(Connection arg0) {
    if (basicConnectionListener != null) {
        basicConnectionListener.onConnectionConnecting();
    }
}
@Override
public void onDisconnected(Connection inConnection) {
    if (inConnection == connection) {
        connection = null;
        if (basicConnectionListener != null)
            basicConnectionListener.onConnectionDisconnected();
    } else if (inConnection == pendingIncomingConnection) {
        pendingIncomingConnection = null;
        if (basicConnectionListener != null)
            basicConnectionListener.onIncomingConnectionDisconnected();
    }
}
@Override
public void onDisconnected(Connection inConnection, int arg1,
        String inErrorMessage) {
    if (inConnection == connection) {
        connection = null;
        if (basicConnectionListener != null)
            basicConnectionListener
                    .onConnectionFailedConnecting(new Exception(
                            inErrorMessage));
    }
}
@Override
public void onPresenceChanged(Device arg0, PresenceEvent arg1) {

}
@Override
public void onStartListening(Device arg0) {
    if (basicDeviceListener != null) {
        basicDeviceListener.onDeviceStartedListening();
    }
}
@Override
public void onStopListening(Device arg0) {
    if (basicDeviceListener != null) {
        basicDeviceListener.onDeviceStoppedListening(null);
    }
}
@Override
public void onStopListening(Device arg0, int arg1, String arg2) {

}
@Override
public boolean receivePresenceEvents(Device arg0) {
    return false;
}
}

И php- код

 <?php

 require_once('Services/Twilio/Capability.php');
// Your API credentials from Account Dashboard here
$accountSid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$authToken = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy';
$appSid = 'APzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';

 $capability = new Services_Twilio_Capability($accountSid, $authToken);
 // give this app permissions
 $capability->allowClientOutgoing($appSid);
 // generate token that lasts for 5 minutes
 $token = $capability->generateToken(300);

  ?>'

Любая помощь будет принята с благодарностью.

  • 0
    Любой журнал ошибок, который вы видите, если не получаете успеха?
  • 0
    Там нет ошибки, просто получить нулевое значение токена способности
Показать ещё 3 комментария
Теги:
twilio

2 ответа

0
Лучший ответ

Твайлио евангелист.

Это не похоже на то, что вы повторяете токен в своем файле PHP. Если вы загружаете этот PHP файл в браузер, генерируется ли токен способности? Если нет, попробуйте добавить echo $token после создания токена.

  • 0
    Мы получаем токен, но не можем получить токен по ссылке: companyfoo.com/token, которая будет подключаться к Android APP и twilio.
  • 0
    Хорошо, просто чтобы уточнить, если вы откроете страницу PHP в окне браузера, будет отображен токен возможности, но вы не сможете восстановить его в своем приложении для Android? Есть ли исключение, выдаваемое HttpHelper?
Показать ещё 1 комментарий
1

Теперь я могу легко позвонить, используя этот вызов:

package com.twilio.example.hellomonkey;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.media.AudioManager;
import android.util.Log;
import android.view.Gravity;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import com.twilio.client.Connection;
import com.twilio.client.Connection.State;
import com.twilio.client.ConnectionListener;
import com.twilio.client.Device;
import com.twilio.client.DeviceListener;
import com.twilio.client.PresenceEvent;
import com.twilio.client.Twilio;
public class MonkeyPhone implements Twilio.InitListener, DeviceListener, ConnectionListener {
private static final String TAG = "MonkeyPhone";
private Device device;
private Connection connection;
private final Context context;
private BasicConnectionListener basicConnectionListener;
private BasicDeviceListener basicDeviceListener;
private Connection pendingIncomingConnection;
InputMethodManager imm;
private boolean speakerEnabled;
private boolean muteEnabled;
static String capabilityToken;

public interface BasicConnectionListener {
    public void onIncomingConnectionDisconnected();

    public void onConnectionConnecting();

    public void onConnectionConnected();

    public void onConnectionFailedConnecting(Exception error);

    public void onConnectionDisconnecting();

    public void onConnectionDisconnected();

    public void onConnectionFailed(Exception error);
}

public interface BasicDeviceListener {
    public void onDeviceStartedListening();

    public void onDeviceStoppedListening(Exception error);
}

public MonkeyPhone(Context context) {
    this.context = context;
    Twilio.initialize(context, this /* Twilio.InitListener */);
}

public void setListeners(BasicConnectionListener basicConnectionListener, BasicDeviceListener basicDeviceListener) {
    this.basicConnectionListener = basicConnectionListener;
    this.basicDeviceListener = basicDeviceListener;
}

/* Twilio.InitListener method */
@Override
public void onInitialized() {
    Log.d(TAG, "Twilio SDK is ready");
    try {
        // String capabilityToken =
        // HttpHelper.httpGet("http://------/mobile/auth.php");
        capabilityToken = HttpHelper.httpGet("your php url which gives you token");

        device = Twilio.createDevice(capabilityToken, null /* DeviceListener */);
    } catch (Exception e) {
        Log.e(TAG, "Failed to obtain capability token: " + e.getLocalizedMessage());
    }
}

/* Twilio.InitListener method */
@Override
public void onError(Exception e) {
    Log.e(TAG, "Twilio SDK couldn't start: " + e.getLocalizedMessage());
}

@Override
protected void finalize() {
    if (device != null)
        device.release();
    if (connection != null)
        connection.disconnect();
}

// To Make Calls

public void connect(String phoneNumber) {
    Toast toast = Toast.makeText(context, "Dialing...", Toast.LENGTH_LONG);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
    Map<String, String> parameters = new HashMap<String, String>();
    parameters.put("PhoneNumber", phoneNumber);
    //String capabilityToken;
    try {
        // capabilityToken =
        // HttpHelper.httpGet("http://------/mobile/auth.php");
        //capabilityToken = HttpHelper.httpGet("your php url which gives you token");

        //device = Twilio.createDevice(capabilityToken, null /* DeviceListener */);
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    try {
        device.disconnectAll();
    } catch (Exception e) {
        e.printStackTrace();
    }
    connection = device.connect(parameters, null /* ConnectionListener */);
    if (connection == null) {
        Log.w(TAG, "Failed to create new connection");
    }
}

// To Disconnect Phone
public void disconnect() {
    Toast toast = Toast.makeText(context, "Call Disconnected...", Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();

    if (connection != null) {
        connection.disconnect();
        connection = null; // will null out in onDisconnected()

        if (basicConnectionListener != null)
            basicConnectionListener.onConnectionDisconnecting();
    }
}

public void setSpeakerEnabled(boolean speakerEnabled) {
    if (speakerEnabled != this.speakerEnabled) {
        this.speakerEnabled = speakerEnabled;
        updateAudioRoute();
    }
}

private void updateAudioRoute() {
    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audioManager.setSpeakerphoneOn(speakerEnabled);
}

public void setMuteEnabled(boolean muteEnabled) {
    if (muteEnabled != this.muteEnabled) {
        this.muteEnabled = muteEnabled;
        updateAudioRouteForMute();
    }
}

private void updateAudioRouteForMute() {
    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audioManager.setMicrophoneMute(muteEnabled);
}

public State status() {
    connection.getState();
    State statusHere = connection.getState();
    return statusHere;
}

@Override
public void onConnected(Connection arg0) {
    updateAudioRoute();
    updateAudioRouteForMute();
    if (basicConnectionListener != null) {
        basicConnectionListener.onConnectionConnected();
    }
}

@Override
public void onConnecting(Connection arg0) {
    if (basicConnectionListener != null) {
        basicConnectionListener.onConnectionConnecting();
    }
}

@Override
public void onDisconnected(Connection inConnection) {
    if (inConnection == connection) {
        connection = null;
        if (basicConnectionListener != null)
            basicConnectionListener.onConnectionDisconnected();
    } else if (inConnection == pendingIncomingConnection) {
        pendingIncomingConnection = null;
        if (basicConnectionListener != null)
            basicConnectionListener.onIncomingConnectionDisconnected();
    }
}

@Override
public void onDisconnected(Connection inConnection, int arg1, String inErrorMessage) {
    if (inConnection == connection) {
        connection = null;
        if (basicConnectionListener != null)
            basicConnectionListener.onConnectionFailedConnecting(new Exception(inErrorMessage));
    }

}

@Override
public void onPresenceChanged(Device arg0, PresenceEvent arg1) {

}

@Override
public void onStartListening(Device arg0) {
    if (basicDeviceListener != null) {
        basicDeviceListener.onDeviceStartedListening();
    }
}

@Override
public void onStopListening(Device arg0) {
    if (basicDeviceListener != null) {
        basicDeviceListener.onDeviceStoppedListening(null);
    }
}

@Override
public void onStopListening(Device arg0, int arg1, String arg2) {

}

@Override
public boolean receivePresenceEvents(Device arg0) {
    return false;
}

}
  • 0
    Вы дадите мне полный код?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню