AS 使用新浪微博授权登录

最近在做一个小项目,简版新浪微博,用到了微博授权登录。

这里使用的是Android studio ,遇到了一些问题,和大家分享一下。


先登录新浪微博开发平台,注册一个开发者账号。http://open.weibo.com。

在网站主页面点击微连接 -->移动应用,添加一个新应用


点击立即接入


创建新应用


创建完成后

然后就会生成一个App Key。这个值后面代码会用到。




然后去网站下载 新浪微博SDK

下载页面    http://open.weibo.com/wiki/SDK。选择你需要的版本下载 

这里下载Android SDK

下载解压后,会有以下文件


把app_signatures.apk装入到你的手机,点击运行。

根据包名,生成一个MD5签名

包名即为 AndroidMaindfest.xlm中的package=" ";


然后,在新浪微博开发网站进入《我的应用》--->《应用信息》--->《基本应用》---->《编辑》

把包名和MD5签名写入保存即可。



最后,还需要注册一下回调地址,这个地址是:当取消授权时调用该地址。


到这里准备工作就完成了。

接下来写代码。

把weiboSDKCore_3.1.2.jar 包复制到AS中的libs目录下

点击该jar包,右键-->As a LIbrary即可完成jar包的导入。

还有重要的一步,把libs中的文件也一起放入到该目录(libs)下。


把以下代码,原封不动的加入到在AndroidMainfest.xml中

<!-- 页面授权配置-->
<activity
    android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
    android:configChanges="keyboardHidden|orientation"
    android:windowSoftInputMode="adjustResize"
    android:exported="false" >
</activity>


这里就一个简单的登录按钮


新建一个接口

public interface Constants {
    public static final String APP_KEY      = "2703292856";          // 应用的APP_KEY
    public static final String REDIRECT_URL = "http://www.sina.com";// 应用的回调页根据注册的回调页填写
    public static final String SCOPE =                          // 应用申请的高级权限
            "email,direct_messages_read,direct_messages_write,"
                    + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
                    + "follow_app_official_microblog," + "invitation_write";
}

新建一个Activity

public class WBAuthActivity extends Activity {
    private AuthInfo authInfo;
    private Oauth2AccessToken accessToken;
    private SsoHandler ssoHandler;
    private Button button;//登录按钮
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wbauth);

        button= (Button) findViewById(R.id.btn);

      authInfo=new AuthInfo(this, Constants.APP_KEY,Constants.REDIRECT_URL,Constants.SCOPE);

        ssoHandler=new SsoHandler(this,authInfo);
	//按钮点击事件
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ssoHandler.authorize(new AuthListener());
            }
        });
    }
    /**
     * 当 SSO 授权 Activity 退出时,该函数被调用。
     * @see {@link Activity#onActivityResult}
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // SSO 授权回调
        // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults
        if ( ssoHandler!= null) {
            ssoHandler.authorizeCallBack(requestCode, resultCode, data);
        }
    }
    /**
     * 微博认证授权回调类。
     * 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,
     *    该回调才会被执行。
     * 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。
     * 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {
        @Override
        public void onComplete(Bundle values) {
            // 从 Bundle 中解析 Token
            accessToken = Oauth2AccessToken.parseAccessToken(values);
            //从这里获取用户输入的 电话号码信息
            String  phoneNum =  accessToken.getPhoneNum();
            if (accessToken.isSessionValid()) {
		// 可以获取各种信息
                Toast.makeText(WBAuthActivity.this,"授权成功", Toast.LENGTH_SHORT).show();
            } else {
                // 以下几种情况,您会收到 Code:
                // 1. 当您未在平台上注册的应用程序的包名与签名时;
                // 2. 当您注册的应用程序包名与签名不正确时;
                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                String code = values.getString("code");

                Toast.makeText(WBAuthActivity.this, "shibai", Toast.LENGTH_LONG).show();
            }
        }
        @Override
        public void onCancel() {
            Toast.makeText(WBAuthActivity.this,"取消授权", Toast.LENGTH_LONG).show();
        }
        @Override
        public void onWeiboException(WeiboException e) {
          Toast.makeText(WBAuthActivity.this,"exception:" +e.getMessage(),Toast.LENGTH_LONG).show();
        }
    }

}

实现效果:


在运行的时候可能会出现错误。

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.myweibo-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]] couldn't find "libweibosdkcore.so"

解决:

在bulid.dradl e中的android 中加入

//noinspection all
    task copyNativeLibs(type: Copy) {
        // third party lib so
        from(new File(projectDir, 'libs')) { include 'armeabi/*.so','armeabi-v7a/*.so' }
        into new File(buildDir, 'native-libs')
    }
    tasks.withType(JavaCompile) {
        compileTask ->
            //noinspection all
            compileTask.dependsOn copyNativeLibs
    }
//noinspection all
    tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
        pkgTask ->
            pkgTask.jniFolders = new HashSet()
            pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
    }




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值