1. 程式人生 > >友盟第三方登入與分享到新浪微博

友盟第三方登入與分享到新浪微博

介面都是使用官方提供的UI
<1> 首先申請第三方賬號,大部分的平臺要進行登入和分享功能,都要在第三方平臺上建立應用並提交稽核,建立應用後,分享登入操作時顯示應用的icon,名稱和對應的開放平臺設定有關
<2>登入新浪微博開放平臺,進行建立應用,同時確保授權回撥頁與程式碼中配置一致,新浪精簡版需要設定安全域名,完整版則不需要此項配置
安全域名必須是”sns.whalecloud.com”
安全域名的修改需要在二次稽核通過才能生效,授權回撥頁修改即時生效
<3>在官網下載jar包,以及對應的res下的檔案匯入到專案中
<4>配置清單檔案,配置key值,配置application
<5>所有的回撥監聽增加onStart()方法
<6>
在main目錄下建立WBShareActivit1y,繼承WBShareCallBackActivity
新增許可權:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

註冊activity

 <activity
            android:name=".WBShareActivity"
            android:configChanges="keyboardHidden|orientation"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
         <activity

//分享編輯頁        android:name="com.umeng.socialize.editorpage.ShareActivity"
        android:theme="@style/Theme.UMDefault"
        android:excludeFromRecents="true"
        />
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化UMShareAPI
        UMShareAPI.get(this);
        Config.DEBUG=true;
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }
    {
        //配置回撥地址需要和微博開放平臺的授權回撥頁一致
        PlatformConfig.setSinaWeibo("3711844932","8d3ea8c18ea72215bb90e2a9a92e5606","http://open.weibo.com/apps/3711844932/info/basic");
    }
}
  /*第三方登入時.每次都要進行授權,目前SDK預設設定為在Token有效期內登入不進行二次授權,
        如果每次登入都要彈出授權介面,就要自行設定
         */
        UMShareConfig config=new UMShareConfig();
        config.isNeedAuthOnGetUserInfo(true);
        //當安裝的時候進行SSO授權,還有一種網頁授權,無論裝置上是否按照微部落格戶端,都只會拉起網頁授權
        config.setSinaAuthType(UMShareConfig.AUTH_TYPE_SSO);
        UMShareAPI.get(getActivity()).setShareConfig(config);

        tvAdmin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //例項化授權回撥監聽
                final UMAuthListener listener = new UMAuthListener() {
                    @Override
                    public void onStart(SHARE_MEDIA share_media) {
                    }
                    //授權成功回撥
                    @Override
                    public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                        String sinaId = map.get("id");
                       //獲取使用者的使用者名稱
                        String name = map.get("name");
                        //獲取使用者的頭像圖片地址
                        imagurl = map.get("iconurl");
                        //將名字設定為微博的名字
                        tvAdmin.setText(name);
                        //將頭像設定為微博的頭像
                        Picasso.with(getActivity()).load(imagurl).into(ivAdmin);
                        Toast.makeText(getActivity(), "授權成功", Toast.LENGTH_SHORT).show();
                    }
                    //授權錯誤回撥
                    @Override
                    public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                        Toast.makeText(getActivity(), "授權失敗", Toast.LENGTH_SHORT).show();
                    }
                    //取消授權回撥
                    @Override
                    public void onCancel(SHARE_MEDIA share_media, int i) {
                        Toast.makeText(getActivity(), "取消授權", Toast.LENGTH_SHORT).show();
                    }
                };
                UMShareAPI shareAPI = UMShareAPI.get(getActivity());
                //獲取使用者資訊所需要實現的介面
                shareAPI.getPlatformInfo(getActivity(), SHARE_MEDIA.SINA, listener);

            }
        });

在Fragment對應的activity中,複寫onActivityResult方法,不可在Fragment實現,要在Fragment對應的activity中複寫,如果不實現onActivityResult方法,會導致登入或回撥無法實現

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(MainActivity.this).onActivityResult(requestCode,resultCode,data);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //防止記憶體洩漏
        UMShareAPI.get(NewsDetailActivity.this).release();
    }

<7>

  //開啟編輯面板
        UMShareConfig config=new UMShareConfig();
        config.isOpenShareEditActivity(true);
        UMShareAPI.get(NewsDetailActivity.this).setShareConfig(config);
          //例項化分享回撥監聽
        umShareListener=new UMShareListener() {
            //分享開始的回撥
            @Override
            public void onStart(SHARE_MEDIA share_media) {

            }
            //分享結束的回撥
            @Override
            public void onResult(SHARE_MEDIA share_media) {
                Toast.makeText(NewsDetailActivity.this,"分享成功",Toast.LENGTH_SHORT).show();
            }
            //分享錯誤的回撥
            @Override
            public void onError(SHARE_MEDIA share_media, Throwable throwable) {
                Toast.makeText(NewsDetailActivity.this,"分享失敗",Toast.LENGTH_SHORT).show();
            }
            //取消分享的回撥
            @Override
            public void onCancel(SHARE_MEDIA share_media) {
                Toast.makeText(NewsDetailActivity.this,"取消分享",Toast.LENGTH_SHORT).show();
            }
        };
          new ShareAction(NewsDetailActivity.this)
                            //將連線拼接在文字的後面
                            .withText(title+Cans.shareUrl(id))
//                            .withMedia(web)
//                            .withExtra(thumb)
//                            .setPlatform( SHARE_MEDIA.SINA.toSnsPlatform().mPlatform)
                            //最終在分享面板中顯示的平臺,順序為展示的排列順序
                            .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.EMAIL,SHARE_MEDIA.FACEBOOK,SHARE_MEDIA.DOUBAN,SHARE_MEDIA.WEIXIN_CIRCLE)
                            .setCallback(umShareListener).open();

在所在的activity中複寫onActivityResult()

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //防止記憶體洩漏
        UMShareAPI.get(NewsDetailActivity.this).release();
    }