android Twitter的登錄與分享dome

這是 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)永久

Paste_Image.png

點(diǎn)擊 create new app

Paste_Image.png

第一個(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)什么用,你看著辦

Paste_Image.png

開(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;
    }
}

Paste_Image.png

清單文件的代碼

<?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)大家一起互相交流交流.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末至朗,一起剝皮案震驚了整個(gè)濱河市拱撵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件番川,死亡現(xiàn)場(chǎng)離奇詭異到涂,居然都是意外死亡脊框,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)践啄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浇雹,“玉大人,你說(shuō)我怎么就攤上這事屿讽≌蚜椋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵伐谈,是天一觀的道長(zhǎng)烂完。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诵棵,這世上最難降的妖魔是什么抠蚣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮履澳,結(jié)果婚禮上嘶窄,老公的妹妹穿的比我還像新娘。我一直安慰自己距贷,他們只是感情好柄冲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著忠蝗,像睡著了一般现横。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天戒祠,我揣著相機(jī)與錄音晦攒,去河邊找鬼。 笑死得哆,一個(gè)胖子當(dāng)著我的面吹牛脯颜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贩据,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栋操,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饱亮?” 一聲冷哼從身側(cè)響起矾芙,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎近上,沒(méi)想到半個(gè)月后剔宪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壹无,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年葱绒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗锭。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡地淀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岖是,到底是詐尸還是另有隱情帮毁,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布豺撑,位于F島的核電站烈疚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏聪轿。R本人自食惡果不足惜爷肝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屹电。 院中可真熱鬧阶剑,春花似錦、人聲如沸危号。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)外莲。三九已至猪半,卻和暖如春兔朦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磨确。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工沽甥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乏奥。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓摆舟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親邓了。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恨诱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容