[英]Android social signin Quickblox chat
這是我的代碼。 我已閱讀quickblox文檔並下載了示例。 我不明白為什么這不起作用!
我有訪問令牌,並將其傳遞給quickblox進行登錄(我可以在儀表板中看到它),但是它沒有使我登錄聊天,而是收到一個大錯誤,說聊天未登錄。
請幫忙。 該站點上的代碼示例很好,但是我敢肯定我只是將某些東西放在錯誤的地方或遺漏了一些東西。 我在束縛的盡頭!!
public class LoginActivity extends Activity {
private String accessToken;
private String accessTokenSecret;
private QBUser user;
private SmackAndroid smackAndroid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_login);
Toast.makeText(this,"this is the login part", 3000).show();
}
smackAndroid = SmackAndroid.init(this);
// get stored AccessToken in shared Preferences
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
accessToken = settings.getString( "twitter_access_token", null );
accessTokenSecret = settings.getString( "twitter_access_token_secret", null );
//AccessToken access_token = new AccessToken(accessToken,accessTokenSecret);
//String TwitToken = String.valueOf(access_token);
// have to start session and pass session ID
String TwitToken = accessToken;
String TwitTokenS = accessTokenSecret;
QBUsers.signInUsingSocialProvider(QBProvider.TWITTER, TwitToken, TwitTokenS, new QBCallbackImpl(){
@Override
public void onComplete(Result result){
if(result.isSuccess()){
//QBUserResult qbUserResult = (QBUserResult) result;
QBUser qbUser = ((QBUserResult)result).getUser();
qbUser.setPassword(BaseService.getBaseService().getToken());
QBChatService.getInstance().signIn(qbUser);
//QBUsers.signIn(qbUser, null);
//loginToChat(qbUser);
Log.d("LogIn was successful","user: " + qbUser.toString());
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
}else{
Log.e("QB didn't login with Twitter",result.getErrors().toString());
}
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
setResult(RESULT_CANCELED, intent);
finish();
}
@Override
protected void onDestroy() {
smackAndroid.onDestroy();
super.onDestroy();
}
// @Override
// public void onComplete(Result result, Object context) {
// }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
}
您使用哪個版本的Android SDK? 請在這里http://quickblox.com/developers/Android#Framework_changelog下載最新版本:
您是否查看過此Android聊天指南? http://quickblox.com/developers/Android_XMPP_Chat_Sample
要登錄聊天,您必須使用以下方法:
QBUser qbUser = ((QBUserResult)result).getUser();
qbUser.setPassword(BaseService.getBaseService().getToken());
Log.d(TAG, "user: " + qbUser);
QBChatService.getInstance().loginWithUser(qbUser, LoginActivity.this);
@Override
public void onLoginSuccess() {
Log.d(TAG, "success when login");
}
@Override
public void onLoginError(String error) {
Log.e(TAG, "error when login");
}
您在日志中看到了什么?
好的,這是我的LoginActivity。
public class LoginActivity extends Activity implements QBCallback {
protected static final String TAG = LoginActivity.class.getSimpleName();
private String accessToken;
private String accessTokenSecret;
private QBUser user;
private SmackAndroid smackAndroid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_login);
Toast.makeText(this,"this is the login part", 3000).show();
smackAndroid = SmackAndroid.init(this);
// get stored AccessToken in shared Preferences
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
accessToken = settings.getString( "twitter_access_token", null );
accessTokenSecret = settings.getString( "twitter_access_token_secret", null );
//AccessToken access_token = new AccessToken(accessToken,accessTokenSecret);
//String TwitToken = String.valueOf(access_token);
// have to start session and pass session ID
String TwitToken = accessToken;
String TwitTokenS = accessTokenSecret;
QBUsers.signInUsingSocialProvider(QBProvider.TWITTER,TwitToken,TwitTokenS,new QBCallbackImpl(),getApplicationContext());
}
@Override
public void onComplete(Result result){
if(result.isSuccess()){
QBSessionResult res = (QBSessionResult)result;
QBUser qbUser = ((QBUserResult)result).getUser();
try {
qbUser.setPassword(BaseService.getBaseService().getToken());
} catch (BaseServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
QBChatService.getInstance().loginWithUser(qbUser, new SessionCallback() {
@Override
public void onLoginSuccess(){
// Intent intent = new Intent();
//
Intent intentChat = new Intent(LoginActivity.this, HomeActivity.class);
setResult(RESULT_OK,intentChat);
startActivity(intentChat);
finish();
}
@Override
public void onLoginError(String error){
Log.i(TAG, "error when login");
}
});
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
setResult(RESULT_CANCELED, intent);
finish();
}
@Override
protected void onDestroy() {
smackAndroid.onDestroy();
super.onDestroy();
}
@Override
public void onComplete(Result result, Object context) {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
}
這是我的chatActivity
public class ChatActivity extends Activity {
public static final String EXTRA_MODE = "mode";
private static final String TAG = ChatActivity.class.getSimpleName();
private EditText messageEditText;
private Mode mode = Mode.SINGLE;
private Chat chat;
private ChatAdapter adapter;
private ListView messagesContainer;
public static void start(Context context, Bundle bundle) {
Intent intent = new Intent(context, ChatActivity.class);
intent.putExtras(bundle);
context.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
initViews();
}
@Override
public void onBackPressed() {
try {
chat.release();
} catch (XMPPException e) {
Log.e(TAG, "failed to release chat", e);
}
super.onBackPressed();
}
private void initViews() {
messagesContainer = (ListView) findViewById(R.id.messagesContainer);
messageEditText = (EditText) findViewById(R.id.messageEdit);
Button sendButton = (Button) findViewById(R.id.chatSendButton);
TextView meLabel = (TextView) findViewById(R.id.meLabel);
TextView companionLabel = (TextView) findViewById(R.id.companionLabel);
RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
adapter = new ChatAdapter(this, new ArrayList<ChatMessage>());
messagesContainer.setAdapter(adapter);
Intent intent = getIntent();
mode = (Mode) intent.getSerializableExtra(EXTRA_MODE);
switch (mode) {
case GROUP:
//chat = new RoomChat(this);
container.removeView(meLabel);
container.removeView(companionLabel);
break;
case SINGLE:
chat = new SingleChat(this);
int userId = intent.getIntExtra(SingleChat.EXTRA_USER_ID, 0);
companionLabel.setText("user(id" + userId + ")");
restoreMessagesFromHistory(userId);
break;
}
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String lastMsg = messageEditText.getText().toString();
if (TextUtils.isEmpty(lastMsg)) {
return;
}
messageEditText.setText("");
try {
chat.sendMessage(lastMsg);
} catch (XMPPException e) {
Log.e(TAG, "failed to send a message", e);
}
if (mode == Mode.SINGLE) {
showMessage(new ChatMessage(lastMsg, Calendar.getInstance().getTime(), false));
}
}
});
}
public void showMessage(ChatMessage message) {
saveMessageToHistory(message);
adapter.add(message);
adapter.notifyDataSetChanged();
scrollDown();
}
public void showMessage(List<ChatMessage> messages) {
adapter.add(messages);
adapter.notifyDataSetChanged();
scrollDown();
}
private void saveMessageToHistory(ChatMessage message) {
if (mode == Mode.SINGLE) {
((App)getApplication()).addMessage(getIntent().getIntExtra(SingleChat.EXTRA_USER_ID, 0), message);
}
}
private void restoreMessagesFromHistory(int userId) {
List<ChatMessage> messages = ((App)getApplication()).getMessages(userId);
if (messages != null) {
showMessage(messages);
}
}
private void scrollDown() {
messagesContainer.setSelection(messagesContainer.getCount() - 1);
}
public static enum Mode {SINGLE, GROUP}
}
我不再收到錯誤,但是登錄活動后無法打開chatActivity。 我以為樣例應用程序的流程會飛濺->主->登錄/注冊->聊天?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.