友盟第三方登入與分享到新浪微博
阿新 • • 發佈:2018-12-22
介面都是使用官方提供的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();
}