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

本文详细介绍了如何集成友盟第三方登录和分享功能,特别是针对新浪微博的设置步骤。包括申请第三方账号、创建应用、设置回调页、导入SDK、配置清单文件、监听回调以及处理Activity结果的注意事项。

界面都是使用官方提供的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();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值