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

来源:互联网 发布:svn服务器搭建ubuntu 编辑:程序博客网 时间:2024/05/29 07:46

界面都是使用官方提供的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();    }
0 0
原创粉丝点击