友盟第三方登录与分享到新浪微博

时间:2022-08-31 11:38:51

界面都是使用官方提供的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();
}