1. 程式人生 > 其它 >新浪微博分享

新浪微博分享

新浪微博分享

//這裡張某分享一種不怎麼繁雜的方式,去掉了一些不怎麼用得到的方法以及程式碼
第一步:申請你 App key

到微博開發平臺上,我的應用頁面 ,通過開發者身份驗證稽核完善應用資訊將該應用提交稽核,只有稽核通過的應用才能進行開發。

第二步:註冊應用程式的包名以及簽名
包名和簽名未註冊,或者簽名註冊不正確,都會導致無發授權報錯

在程序的build.gradle中新增自己所需的依賴

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
        //為了方便一點,這裡我直接把自己裡的依賴全部匯入進來的,其實程序中的依賴就兩句程式碼     這裡打刪除線的就是所需要的依賴,

    ~~maven { url'https://dl.bintray.com/thelasterstar/maven/'}
        maven { url'https://dl.bintray.com/umsdk/release' }~~ 

        maven { url'https://dl.bintray.com/thelasterstar/maven/'}

        maven { url'https://dl.bintray.com/umsdk/release' }
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.1"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
    //到了這裡我們再把上面匯入的依賴再倒入一遍
        maven { url'https://dl.bintray.com/thelasterstar/maven/'}

        maven { url'https://dl.bintray.com/umsdk/release' }
        google()
        jcenter()

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

接下來就是在自己專案裡匯入所需的依賴

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.cs"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
	//這裡匯入的依賴比較的繁瑣,所以我還是把我應用內的所有依賴匯入進來

    // ndk{
//這裡我們看到,所註釋的程式碼就是我們要匯入的依賴
     //       abiFilters'armeabi' //, 'armeabi-v7a','arm64-v8a'

    //    }


        ndk{

            abiFilters'armeabi' //, 'armeabi-v7a','arm64-v8a'

        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'



    implementation'com.sina.weibo.sdk:core:9.12.0:
[email protected]
' implementation"com.umeng.umsdk:common:9.1.0" // asms包依賴(必選) implementation"com.umeng.umsdk:asms:1.1.3" // native crash包依賴(必選 implementation"com.umeng.umsdk:crash:0.0.4" }

在AndroidManifest.xml中新增許可權:

//網路許可權以及寫
   <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

走到這裡我們所需要的配置基本以及配置完畢。
初始化程式碼如下:

public class MainActivity extends AppCompatActivity {
   private static final String APP_KY = "在微博開發平臺申請的App的key";
    private static final String REDIRECT_URL = "在微博開發平臺的回撥路徑";
    //http://www.sina.com
    private static final String SCOPE ="在微博開發平臺申請的高階許可權";
    //"email,direct_messages_read,direct_messages_write,"
                    + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
                    + "follow_app_official_microblog," + "invitation_write"

    private IWBAPI mWBAPI;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initSdk();
        initView();
    }

    private void initView() {
        Button bnt = findViewById(R.id.bnt);
        bnt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              doWeiboShare();
             //   initSdk();
            }
        });
    }

    private void initSdk() {
        AuthInfo authInfo = new AuthInfo(this, APP_KY, REDIRECT_URL, SCOPE);
        mWBAPI = WBAPIFactory.createWBAPI(this);
        mWBAPI.registerApp(this, authInfo);
    }
    private void startAuth() {
        //auth
        mWBAPI.authorize(new WbAuthListener() {
            @Override
            public void onComplete(Oauth2AccessToken token) {
                Toast.makeText(MainActivity.this, "微博授權成功", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onError(UiError error) {
                Toast.makeText(MainActivity.this, "微博授權出錯",Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onCancel() {
                Toast.makeText(MainActivity.this, "微博授權出錯", Toast.LENGTH_SHORT).show();
            }
        });
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (mWBAPI != null) {
            mWBAPI.doResultIntent(data,new ShareCallback());
        }
    }

    //
    private  class ShareCallback implements WbShareCallback {
        @Override
        public void onComplete() {
            Toast.makeText(MainActivity.this, "分享成功",Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onError(UiError error) {
            Toast.makeText(MainActivity.this, "分享失敗" + error.errorMessage, Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onCancel() {
            Toast.makeText(MainActivity.this, "分享取消", Toast.LENGTH_SHORT).show();
        }
    }



    private void doWeiboShare() {
        WeiboMultiMessage message = new WeiboMultiMessage();
        TextObject textObject = new TextObject();
        String text = "測試";
        textObject.text = text;
        message.textObject = textObject;
        mWBAPI.shareMessage(message, true);
    }

}

微博不止一種分享方式
下面:

 private void doWeiboShare() {
 WeiboMultiMessage message = new WeiboMultiMessage();
 
//分享單圖
 if (mShareImage.isChecked()) {
 ImageObject imageObject = new ImageObject();
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.share_image);
 imageObject.setImageData(bitmap);
 message.imageObject = imageObject;
 
//分享網頁
 if (mShareUrl.isChecked()) {
 WebpageObject webObject = new WebpageObject();
 webObject.identify = UUID.randomUUID().toString();
 webObject.title = "標題"
 webObject.description = "描述"
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo);
 ByteArrayOutputStream os = null;
 try {
 os = new ByteArrayOutputStream();
 bitmap.compress(Bitmap.CompressFormat.JPEG, 85, os);
 webObject.thumbData = os.toByteArray();
 } catch (Exception e) {
微博SDK 2019/12/11, 11:16
http://localhost:8081/#/docs/user-guide/instruction-android Page 8 of 9
 e.printStackTrace();
 } finally {
 try {
 if (os != null) {
 os.close();
 }
 } catch (IOException e) {
 e.printStackTrace();
        }
     }
 }
 webObject.actionUrl = "https://weibo.com";
 webObject.defaultText = "分享網頁";
 message.mediaObject = webObject;
 }
//分享多圖

 if (mShareMultiImage.isChecked()) {
 MultiImageObject multiImageObject = new MultiImageObject();
 List<Uri> list = new ArayList<Uri>()Ҕ
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/aaa.png")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/ccc.JPG")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/ddd.jpg")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/fff.jpg")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/ggg.JPG")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/eee.jpg")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/hhhh.jpg")));
 list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/kkk.JPG")));
 multiImageObject.imageList = list;
 message.multiImageObject = multiImageObject;
 }
//分享視訊

 if (mShareVideo.isChecked()) {
 VideoSourceObject videoObject = new VideoSourceObject();
 videoObject.videoPath = Uri.fromFile(new File(getExternalFilesDir(null) + "/eeee.mp4"));
 message.videoSourceObject = videoObject;
 }

// mShareClientOnly.isChecked()表示是否只通過微部落格戶端分享
mWBAPI.shareMessage(message, mShareClientOnly.isChecked());