這是 https://dev.twitter.com/twitterkit/android/overview
的開(kāi)發(fā)者文檔,
這是 https://apps.twitter.com 注冊(cè)開(kāi)發(fā)者賬號(hào)
注意都要翻墻哦,
本人第一次寫(xiě)登錄與分享,就寫(xiě)Twitter ,給我的感覺(jué)是Twitter的開(kāi)發(fā)文檔好坑好坑好坑,當(dāng)我百度和google時(shí)發(fā)現(xiàn)他們初始化都不太一樣,官方給的文檔寫(xiě)出來(lái)連按鈕都不能點(diǎn)擊,我也是醉了.
還有就是國(guó)內(nèi)的Twitter的文章好少,沒(méi)多少還基本一樣,看國(guó)外的吧,找到一個(gè)詳細(xì)的要用那個(gè) fabric的 結(jié)果搞進(jìn)去后發(fā)現(xiàn)里面不知道怎么沒(méi)Twitter的選項(xiàng)了,不知道什么原因,沒(méi)有去深究,然后在github上找找到之前那個(gè)花了三天時(shí)間并看源碼寫(xiě)出Twitter登錄的那個(gè)哥們的代碼,然后改了改跑起來(lái)了
這里有個(gè)坑就是當(dāng)點(diǎn)擊登錄按鈕時(shí)要翻墻,所以哥們你還是去在手機(jī)安裝一個(gè)藍(lán)燈吧
先登錄開(kāi)發(fā)者賬號(hào)吧
我建議用手機(jī)號(hào)進(jìn)去了在綁定郵箱,盡量把信息填全一點(diǎn),以減小被封的幾率,我在Facebook用郵箱注冊(cè)進(jìn)去看著看著就被封了,要我照片,我當(dāng)然不給就在網(wǎng)上隨便搜了一張發(fā)過(guò)去過(guò)兩天賬號(hào)永久
點(diǎn)擊 create new app
第一個(gè)是應(yīng)用名稱,下一個(gè)是創(chuàng)建應(yīng)用的說(shuō)明,你應(yīng)用的網(wǎng)址和回調(diào)網(wǎng)址,兩個(gè)網(wǎng)址對(duì)于只寫(xiě)一個(gè)dome來(lái)說(shuō)沒(méi)什么用,你看著辦
開(kāi)發(fā)協(xié)議打鉤 點(diǎn)擊按鈕
賬號(hào)好了就來(lái)寫(xiě)代碼了
app的build.gradle
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
// These docs use an open ended version so that our plugin
// can be updated quickly in response to Android tooling updates
// We recommend changing it to the latest version from our changelog:
// https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "br.com.carinatiemiyoshida.twitterdemonumberone"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
// compile 'com.android.support.constraint:constraint-layout:1.0.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:25.3.1'
compile 'com.squareup.picasso:picasso:2.3.2'
compile('com.twitter.sdk.android:twitter:2.3.2@aar') {
transitive = true;
}
}
清單文件的代碼
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="br.com.carinatiemiyoshida.twitterdemonumberone">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- <meta-data
android:name="io.fabric.ApiKey"
android:value="f1f66542f826a25bb075924b95a22d09db87497e" />-->
</application>
</manifest>
activity_main的代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.twitter.sdk.android.core.identity.TwitterLoginButton
android:id="@+id/twitter_login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<ImageView
android:id="@+id/imageView"
android:layout_marginTop="20dp"
android:layout_width="100sp"
android:layout_height="100sp" />
<TextView
android:id="@+id/txtDetails"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:onClick="shareToTwitter"
android:text="Twitter分享"
android:textAllCaps="false" />
</LinearLayout>
MainActivity的代碼:
package br.com.carinatiemiyoshida.twitterdemonumberone;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import com.twitter.sdk.android.Twitter;
import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterAuthConfig;
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.TwitterSession;
import com.twitter.sdk.android.core.identity.TwitterLoginButton;
import com.twitter.sdk.android.core.models.User;
import com.twitter.sdk.android.tweetcomposer.TweetComposer;
import java.net.MalformedURLException;
import java.net.URL;
import io.fabric.sdk.android.Fabric;
import retrofit2.Call;
public class MainActivity extends AppCompatActivity {
private static final String TWITTER_KEY = "這里是API key";
private static final String TWITTER_SECRET = "這里是API Secret";
private static String LAG = "-----------MainActivity";
private TwitterLoginButton loginButton;
private ImageView imageView;
private TextView txtDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig));
setContentView(R.layout.activity_main);
loginButton = (TwitterLoginButton) findViewById(R.id.twitter_login_button);
imageView = (ImageView) findViewById(R.id.imageView);
txtDetails = (TextView) findViewById(R.id.txtDetails);
Log.e(LAG,"第一步");
loginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
Log.e(LAG,"第二步");
TwitterSession session = result.data;
final String userName = session.getUserName();
//String msg = "@" + session.getUserName() + " logged in! (#" + session.getUserId() + ")";
Call<User> user = Twitter.getApiClient(session).getAccountService().verifyCredentials(true, false);
user.enqueue(new Callback<User>() {
@Override
public void success(Result<User> result) {
Log.e(LAG,"第3步");
User userInfo = result.data;
String email = userInfo.email;
String description = userInfo.description;
String location = userInfo.location;
userInfo.getId();
int friendsCount = userInfo.friendsCount;
int favouritesCount = userInfo.favouritesCount;
int followersCount = userInfo.followersCount;
Picasso.with(getApplicationContext())
.load(userInfo.profileImageUrl)
.into(imageView);
Log.e(LAG,"------------ "+userInfo.profileImageUrl);
StringBuilder sb = new StringBuilder();
sb.append("User Name: "+ userName);
sb.append("\n");
sb.append("Email: "+ email);
sb.append("\n");
sb.append("Description: "+ description);
sb.append("\n");
sb.append("Location: "+ location);
sb.append("\n");
sb.append("FriendsCount: "+ friendsCount);
sb.append("\n");
sb.append("FavouritesCount: "+ favouritesCount);
sb.append("\n");
sb.append("FollowersCount: "+ followersCount);
txtDetails.setText(sb.toString());
}
@Override
public void failure(TwitterException exception) {
Log.e(LAG,"第4步");
}
});
loginButton.setVisibility(View.INVISIBLE);
//Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
}
@Override
public void failure(TwitterException exception) {
Log.e(LAG,"第5步");
Log.e("TwitterKit", "Login with Twitter failure", exception);
Log.e("BLA: ", exception.getMessage());
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(LAG,"第6步");
loginButton.onActivityResult(requestCode, resultCode, data);
}
/**
* 分享到twitter
* 若未安裝twitter客戶端鹃操,則會(huì)跳轉(zhuǎn)到瀏覽器
*
* @param view
*/
public void shareToTwitter(View view) {
//這里分享一個(gè)鏈接煌抒,更多分享配置參考官方介紹:https://dev.twitter.com/twitterkit/android/compose-tweets
try {
TweetComposer.Builder builder = new TweetComposer.Builder(MainActivity.this)
.url(new URL("https://www.google.com/"));
builder.show();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
MyResultReceiver的代碼:
package br.com.carinatiemiyoshida.twitterdemonumberone;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.twitter.sdk.android.tweetcomposer.TweetUploadService;
/**
* Created by and2long on 2017/6/25.
* Twitter的分享結(jié)果會(huì)在這里接受到,在此做相應(yīng)的業(yè)務(wù)邏輯
*/
public class MyResultReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (TweetUploadService.UPLOAD_SUCCESS.equals(intent.getAction())) {
// success Twitter分享成功的回調(diào)
final Long tweetId = intent.getExtras().getLong(TweetUploadService.EXTRA_TWEET_ID);
} else {
// failure
final Intent retryIntent = intent.getExtras().getParcelable(TweetUploadService.EXTRA_RETRY_INTENT);
}
}
}
注意手機(jī)要翻墻哦
對(duì)了這是本人github地址: https://github.com/liang9/LoginShareTwitter
如果你覺(jué)得這篇文章對(duì)你有所幫助,請(qǐng)您點(diǎn)擊一下喜歡以表示鼓勵(lì),謝謝.
還有就是如果文章哪里有問(wèn)題可以說(shuō)出來(lái)大家一起互相交流交流.