मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं और ट्विटर को एकीकृत करना चाहता हूं।एंड्रॉइड के खाता प्रबंधक वर्गों के माध्यम से ट्विटर प्रमाणीकरण
मुझे समझ में आता है कि उपयोगकर्ता के डिवाइस पर, आधिकारिक एंड्रॉइड ट्विटर ऐप स्थापित है तो हम खाता प्रबंधक का उपयोग here के रूप में प्रमाणित कर सकते हैं .. और यदि स्थापित नहीं है तो ट्विटर लॉगिन वेब पेज दिखाएं।
क्या मेरी समझ सही है?
अब ट्विटर वेब लॉगिन पेज का उपयोग कर प्रमाणीकरण ठीक काम कर रहा है। लेकिन मैं खाता प्रबंधक का उपयोग करके लॉगिन कैसे करूं?
मैं "के रूप में com.twitter.android.auth.login" AccountsType का उपयोग से • com.twitter.android.oauth.token • com.twitter.android.oauth टोकन और टोकन को गुप्त का उपयोग कर खाता प्रबंधक मिला है। token.secret
मैं ट्विटर 4 जे का उपयोग कर रहा हूं, और मेरे CONSUMER_KEY & CONSUMER_SECRET के साथ recvd के साथ प्रमाणीकरण कर रहा हूं। टोकन। लेकिन प्रमाणीकरण हमेशा विफल रहता है।
CONSUMER_KEY & CONSUMER_SECRET जब मैं ट्विटर पर ऐप पंजीकृत करता हूं तो मुझे मिली चाबियां मिलती हैं ... लेकिन मुझे नहीं पता कि मैं इन चाबियों का आधिकारिक एंड्रॉइड ट्विटर ऐप प्रमाणीकरण के साथ कैसे उपयोग कर सकता हूं?
Pls। मुझे पता है धन्यवाद
जाने यहाँ मेरी कोड
public class TwitterAuthentication {
private static final String TAG = "TwitterAuthentication";
private static final int MSG_GOT_AUTH_TOKEN = 100;
private static final int MSG_GOT_AUTH_SECRET = 101;
private static final int MSG_NO_AUT_TOKEN_RECVD = 102;
public static Twitter mTwitter = null;
private Activity mActivity = null;
private SharedPreferences prefs;
private MessageHandler handler = new MessageHandler();
public static boolean bAuthenticationDone = false;
public TwitterAuthentication(Activity activity){
mActivity = activity;
prefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
if (null == mTwitter){
mTwitter = new TwitterFactory().getInstance();;
mTwitter.setOAuthConsumer(Constant.CONSUMER_KEY, Constant.CONSUMER_SECRET);
bAuthenticationDone = false;
}
}
public void LoginTwitter(){
if (Constants.DEBUG)Log.d(TAG,"LoginTwitter");
if (bAuthenticationDone){
TwitterSessionEvents.onLoginSuccess();
}
else if (!isSessionValid()){
AuthTwitter();
}
else{
bAuthenticationDone = true;
TwitterSessionEvents.onLoginSuccess();
}
}
public boolean isSessionValid(){
boolean ret = false;
if (null != prefs && null != mTwitter){
String token = prefs.getString(Constant.OAUTH_TOKEN, "");
String secret = prefs.getString(Constant.OAUTH_TOKEN_SECRET, "");
if (null != token && null != secret && token.length()>0 && secret.length()>0){
AccessToken a = new AccessToken(token,secret);
mTwitter.setOAuthAccessToken(a);
try {
mTwitter.getAccountSettings();
keys.User_Id = mTwitter.getScreenName();
ret = true;
} catch (TwitterException e) {
ret = false;
}
}
}
return ret;
}
public void AuthTwitter(){
// First check if Account manager has valid token
// Result of this is send in MSG
CheckAccManagerForTwitter();
}
public Twitter getTwitter(){
return mTwitter;
}
private boolean CheckAccManagerForTwitter(){
AccountManager am = AccountManager.get(mActivity);
Account[] accts = am.getAccountsByType("com.twitter.android.auth.login");
if(accts.length > 0) {
Account acct = accts[0];
am.getAuthToken(acct, "com.twitter.android.oauth.token", null, mActivity, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle b = arg0.getResult();
String token = b.getString(AccountManager.KEY_AUTHTOKEN);
String userName = b.getString(AccountManager.KEY_ACCOUNT_NAME);
handler.sendMessage(handler.obtainMessage(MSG_GOT_AUTH_TOKEN, token));
}
catch (Exception e) {
Log.e(TAG, "[email protected]");
handler.sendEmptyMessage(MSG_NO_AUT_TOKEN_RECVD);
}
}}, null);
am.getAuthToken(acct, "com.twitter.android.oauth.token.secret", null, mActivity, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle b = arg0.getResult();
String secret = b.getString(AccountManager.KEY_AUTHTOKEN);
handler.sendMessage(handler.obtainMessage(MSG_GOT_AUTH_SECRET,secret));
}
catch (Exception e) {
Log.e(TAG, "[email protected]");
handler.sendEmptyMessage(MSG_NO_AUT_TOKEN_RECVD);
}
}}, null);
//
}
else{
// No twitter account found in Account Manager
Log.e(TAG, "No Twitter account in Account manager");
handler.sendEmptyMessage(MSG_NO_AUT_TOKEN_RECVD);
}
return true;
}
class MessageHandler extends Handler {
String token = null;
String secret = null;
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_GOT_AUTH_TOKEN | msg.what ==MSG_GOT_AUTH_SECRET){
if (msg.what == MSG_GOT_AUTH_TOKEN){
token = (String)msg.obj;
}
else if (msg.what == MSG_GOT_AUTH_SECRET){
secret = (String)msg.obj;
}
if (null != token && null != secret){
AccessToken accesstoken = new AccessToken(token,secret);
mTwitter.setOAuthAccessToken(accesstoken);
try {
mTwitter.getAccountSettings();
keys.User_Id = mTwitter.getScreenName();
} catch (Exception e) {
// That means Authentication Failed
// So fall back to web login
Intent i = new Intent(mActivity.getApplicationContext(), PrepareRequestTokenActivity.class);
mActivity.startActivity(i);
}
}
}
else if (msg.what == MSG_NO_AUT_TOKEN_RECVD){
// That means There is no twiter account with Account Manager
// So fall back to web login
Intent i = new Intent(mActivity.getApplicationContext(), PrepareRequestTokenActivity.class);
mActivity.startActivity(i);
}
}
}
public void LogoutTwiter(){
}
}
@DArko आपकी प्रतिक्रिया के लिए धन्यवाद, मैं समझता हूं कि आप क्या कहते हैं, लेकिन समस्या यह है कि जब ट्विटर 4J में मैंने इसे एक्सेस टोकन के रूप में सेट किया, तो मुझे अपवाद मिल गया। – Naveen
@DArko मैंने अपनी पोस्ट में कोड जोड़ा है, बस यह दिखाने के लिए कि मैं क्या कर रहा हूं, Pls। मुझे बताएं कि मैं कहां गलत हूं। – Naveen
क्या आपने जो टोकन प्राप्त किया है उसे लॉग करने का प्रयास किया है? शायद ब्राउज़र से टोकन का उपयोग करने का प्रयास करें, देखें कि यह मान्य है या कुछ या कम से कम अगर यह सही ढंग से प्राप्त हुआ है। कोड जितना ठीक हो सकता है उतना ठीक लगता है .. – DArkO