2015-07-20 24 views
2

我是Quickblox的新手。我正在嘗試webrtc。我遵循教程here。我也提到QuickBlox Error with Custom Object (Android)。我收到以下錯誤,當我嘗試創建一個session無法在Android中的Quickblox中創建會話

Authentication error: Unable to respond to any of these challenges: {}

D/QBASDK(31816): STATUS : 401

D/QBASDK(31816): '{"errors":["Unauthorized"]}'

我完整的代碼下面粘貼:

public class MainActivity extends ActionBarActivity implements OnClickListener, 
    QBRTCClientSessionCallbacks, QBRTCClientConnectionCallbacks, 
    QBRTCClientVideoTracksCallbacks { 
QBChatService chatService; 
QBUser user1, user2; 
QBGLVideoView localVideoVidew; 
Button btn_session; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn_session = (Button) findViewById(R.id.btn_session); 
    btn_session.setOnClickListener(MainActivity.this); 

    /* 
    * user1 = new User(1, "User1", "user1", "1234", 1); user2 = new User(2, 
    * "User2", "user2", "1234", 2); 
    */ 
    if (!QBChatService.isInitialized()) { 
     QBChatService.init(MainActivity.this); 
     chatService.getInstance(); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.btn_session: 
     create_session(); 
     // create_SignallingManager(); 
     break; 

    default: 
     break; 
    } 
} 

public void create_SignallingManager() { 
    // TODO Auto-generated method stub 

    QBChatService 
      .getInstance() 
      .getVideoChatWebRTCSignalingManager() 
      .addSignalingManagerListener(
        new QBVideoChatSignalingManagerListener() { 

         @Override 
         public void signalingCreated(
           QBSignaling qbSignaling, boolean arg1) { 
          // TODO Auto-generated method stub 
          if (!arg1) { 
           QBRTCClient.getInstance().addSignaling(
             (QBWebRTCSignaling) qbSignaling); 
          } 
         } 
        }); 
    QBRTCClient.getInstance().setCameraErrorHendler(
      new VideoCapturerAndroid.CameraErrorHandler() { 
       @Override 
       public void onCameraError(final String s) { 
        MainActivity.this.runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(MainActivity.this, s, 
            Toast.LENGTH_LONG).show(); 
         } 
        }); 
       } 
      }); 
    QBRTCClient.getInstance() 
      .addSessionCallbacksListener(MainActivity.this); 
    QBRTCClient.getInstance().addConnectionCallbacksListener(
      MainActivity.this); 
    QBRTCClient.getInstance().addVideoTrackCallbacksListener(
      MainActivity.this); 

    QBRTCClient.getInstance().prepareToProcessCalls(MainActivity.this); 
} 

private void create_session() { 
    QBSettings.getInstance().fastConfigInit("XXXX", "XXXXXXX", "XXXXX");//Have put ids properly in code 
    final QBUser user = new QBUser("user1", "1234");  
    QBAuth.createSession(user, new QBCallback() { 

     @Override 
     public void onComplete(Result arg0, Object arg1) { 
      // TODO Auto-generated method stub 
      QBUsers.signIn(user,new QBCallback() { 

       @Override 
       public void onComplete(Result arg0, Object arg1) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onComplete(Result arg0) { 
        // TODO Auto-generated method stub 
        if(arg0.isSuccess()) 
        { 
         Log.i("working","fine"); 
        } 
       } 
      }); 

     } 

     @Override 
     public void onComplete(Result arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 




} 

@Override 
public void onLocalVideoTrackReceive(QBRTCSession arg0, 
     QBRTCVideoTrack videoTrack) { 
    // TODO Auto-generated method stub 
    localVideoVidew = (QBGLVideoView) findViewById(R.id.localVideoView); 
    Log.d("TAG", "localVideoVidew is " + localVideoVidew); 
    if (localVideoVidew != null) { 
     videoTrack.addRenderer(new VideoRenderer(new VideoCallBacks(
       localVideoVidew, QBGLVideoView.Endpoint.LOCAL))); 
     localVideoVidew.setVideoTrack(videoTrack, 
       QBGLVideoView.Endpoint.LOCAL); 
     Log.d("TAG", "onLocalVideoTrackReceive() is raned"); 
    } 
} 

@Override 
public void onRemoteVideoTrackReceive(QBRTCSession arg0, 
     QBRTCVideoTrack arg1, Integer arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onConnectedToUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onConnectionClosedForUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onConnectionFailedWithUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onDisconnectedFromUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onDisconnectedTimeoutFromUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onError(QBRTCSession arg0, QBRTCException arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStartConnectToUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onCallRejectByUser(QBRTCSession arg0, Integer arg1, 
     Map<String, String> arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onReceiveHangUpFromUser(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onReceiveNewSession(QBRTCSession arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSessionClosed(QBRTCSession arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSessionStartClose(QBRTCSession arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onUserNotAnswer(QBRTCSession arg0, Integer arg1) { 
    // TODO Auto-generated method stub 

} 

}

回答

3

401未授權

該請求需要用戶驗證。基本和摘要訪問認證」

你缺少onSuccessMethod()

QBSettings.getInstance().fastConfigInit("XXXX", "XXXXXXX", "XXXXX");//Have put ids properly in code 
    final QBUser user = new QBUser("user1", "1234"); 

// then the user will be logged in automatically 
QBAuth.createSession(login, password, new QBEntityCallbackImpl<QBSession>() { 
    @Override 
    public void onSuccess(QBSession session, Bundle bundle) { 

     user.setId(session.getUserId());     

     // INIT CHAT SERVICE 
     if (!QBChatService.isInitialized()) { 
     QBChatService.init(this); 
     chatService = QBChatService.getInstance(); 
     } 

     // LOG IN CHAT SERVICE 
     chatService.login(user, new QBEntityCallbackImpl<QBUser>() { 

     @Override 
     public void onSuccess() { 
      // success 
     } 

     @Override 
     public void onError(List errors) { 
      //error 
     } 
     }); 
    } 

    @Override 
    public void onError(List<String> errors) { 
     //error 
    } 
}); 
+0

我必須使用這個程序,註冊成爲USER1第一或只需創建QBUser用戶? – Tiny

+0

@Tiny首先閱讀教程並瞭解QBUser的工作過程。接受它會幫助別人的答案,它會爲你工作。 – NovusMobile

0

未經授權意味着用戶的登錄名或密碼錯了,你應該檢查這個第一