2015-01-15 2 views
0

나는 Twilio Android Quickstart을 시험해보고 있으며, Java의 발신 전화 걸기 단원의 끝 부분을 보았습니다.하지만 웬일인지. Android에서 성공하지 못합니다.안드로이드에 Twilio를 통합하는 방법

토큰 용 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

오류가 없습니다. 기능 토큰의 null 값을 가져 오는 중 –

+0

아직 응답이 없습니다. –

답변

0

여기에 Twilio 전도사가 있습니다.

PHP 파일에서 토큰을 반향 출력하는 것처럼 보이지 않습니다. PHP 파일을 브라우저에로드하면 capability token이 생성됩니까? 그렇지 않은 경우 토큰을 생성 한 후 echo $token을 추가하십시오.

+0

우리는 토큰을 받고 있지만 링크에서 능력 토큰을 얻을 수 없습니다 : http://companyfoo.com/token 그러면 안드로이드 APP와 twilio와 연결됩니다. –

+0

OK. 기능 토큰이 렌더링되었지만 Android 앱에서이를 반복 할 수없는 브라우저 창? HttpHelper에 의해 예외가 던져지고 있습니까? –

+0

'NetworkOnMainThreadException'을 받았습니다 –

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

당신은 나에게 완전한 sorce 코드를 제공 할 것입니까? –

관련 문제