Android友盟第三方登录

2,612 阅读4分钟

最近项目中使用到了友盟(社会化Android组件),开始集成的时候没来及细读友盟提供的开发文档。现在来总结一下集成过程中遇到的问题。

##### 1.申请第三方账号     友盟   新浪微博开放平台   微信开放平台   腾讯开放平台      具体操作可以跟上面的链接进行操作,也可参照:http://dev.umeng.com/social/android/operation#1_3      ##### 2.注册应用   在申请账号的时候需要AppKey在每个开放平台中都提供的有获取应用AppKey的生成工具。每个平台注册的时候要保证他们的Appkey一致不然会出现无法使用的情况。开放平台注册成功了,在友盟注册应用:http://mobile.umeng.com/apps     ##### 3.集成友盟SDK  SDK下载地址   目前我使用的是最新的SDK v5.2.1,可自行根据项目需要集成相应的功能。下载下来的SDK目录结构    

umeng_sdk
   拿到了sdk,现在就需要把sdk集成进项目中。如图所示把Platforms目录里面的libs导入项目中,这里我并没有引入res中的资源文件。    
umeng_libs
   需要注意的是,如果项目中用来微信支付功能就不要导入SocialSDK_WeiXin_1.jar包避免冲突。、  引入so文件:  >在“src/main”目录中新建名为“jniLibs”的目录,将so文件复制、粘贴到“jniLibs”目录内。    ##### 3.在项目中进行注册    1.AndroidManifest.xml  ```ruby                                                                                                 

                   

       

               

                                                            

                                                                           

      2. Application 中注册ruby         //开放平台注册的 appId  AppKey      {         //微信 appid appsecret         PlatformConfig.setWeixin("#####", "#####");         //  新浪微博 appid appsecret         PlatformConfig.setSinaWeibo("####", "####");         //qq appid appsecret         PlatformConfig.setQQZone("####", "#####");     } 以上配置完成,就可以在项目中使用使用友盟提供的接口进行登录操作。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Bind(R.id.iv_wechat)
    ImageView mWechat;
    @Bind(R.id.iv_qq)
    ImageView mQQ;
    @Bind(R.id.iv_sina)
    ImageView mSina;

    private UMShareAPI mShareAPI = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //首先获取UMShareAPI
        mShareAPI = UMShareAPI.get(this);
    }

    @OnClick({R.id.iv_wechat, R.id.iv_qq, R.id.iv_sina})
    @Override
    public void onClick(View view) {
//        选取授权平台,并授权
        SHARE_MEDIA platform = null;
        switch (view.getId()) {
            case R.id.iv_wechat:
                platform = SHARE_MEDIA.WEIXIN;
                break;
            case R.id.iv_qq:
                platform = SHARE_MEDIA.QQ;
                break;
            case R.id.iv_sina:
                platform = SHARE_MEDIA.SINA;
                break;
        }
        // doOauth接口返回的授权信息
        mShareAPI.doOauthVerify(MainActivity.this, platform, umAuthListener);

    }

    private UMAuthListener umAuthListener = new UMAuthListener() {
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            if (data != null) {
                //调用getplatforminfo接口来获取返回值
                mShareAPI.getPlatformInfo(MainActivity.this, platform, umAuthMesListener);
            }
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText(MainActivity.this, "授权失败", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(MainActivity.this, "授权取消", Toast.LENGTH_SHORT);
        }
    };

    private UMAuthListener umAuthMesListener = new UMAuthListener() {

        @Override
        public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
            Toast.makeText(MainActivity.this, "授权成", Toast.LENGTH_SHORT);

            String m = share_media.toString();
            Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, String> entry = iterator.next();
                 //再次遍历取出你需要的参数
            }

        }

        @Override
        public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {

        }

        @Override
        public void onCancel(SHARE_MEDIA share_media, int i) {

        }
    };

   //重写onActivityResult方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mShareAPI.onActivityResult(requestCode, resultCode, data);
    }

}

值得注意的是友盟提供了一个删除授权使用的接口:

mShareAPI.deleteOauth(AuthActivity.this, platform, umdelAuthListener);

到此第三方登录就算完成,是不是很简单。需要我们注意的是注册开放平台的时候要按照流程来。还有就是在应用中注册时保证应用appkey 和 appId 要正确。关于友盟的第三方分享友盟文档中也详细的介绍过了。(多读几遍开发文档会发如此简单)

小栗子:Demo

在接入SDK时遇到的一些常见问题和学习资料:

IT_xiao小巫 友盟社会化分享集成问题索引 混淆后无法打包成功 新浪微博提示缺失文件,错误码C8998