第三方登陆,分享以及短信验证码

本次记录的是在android studio中集成sharesdk的环境。又需要在新项目里面集成sharesdk的第三方登陆,分享,以及短信验证码,索性就记录下吧。首先需要吐槽下mob,as都这么大势所趋了,还以ec为项目结构,需要集成sharesdk环境的话还需要我们一个个去赋值粘贴。果断差评有木有

一、分享

这里写图片描述

大概是这些地方,如果你的as报错的话,建议使用必杀招,重启as。我就遇到了这么坑爹的问题,昨天怎么都保存,今天早上一来就没错了,总结了下,as抽筋了。

需要在你的清单文件androidmainfest中的application中加入以下代码

<activity
            android:name="com.mob.tools.MobUIShell"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustResize" >
            <intent-filter>
                <data android:scheme="tencent100371282" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <!-- 调用新浪原生SDK,需要注册的回调activity -->
            <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="cn.sharesdk.demo.wxapi.WXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait" />
        <activity android:name=".MainActivity">

然后基本的mob环境就已经有了。那么我建议你先了解下你这个应用需要在哪些平台分享,然后去mob网站集成。

然后分享这部分就跟ec的都一样了,对,就是这个方法

protected void shareShow(){
        ShareSDK.initSDK(this);
        OnekeyShare oks = new OnekeyShare();
        //关闭sso授权
        oks.disableSSOWhenAuthorize();
        // 分享时Notification的图标和文字  2.5.9以后的版本不调用此方法
        //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
        // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
        oks.setTitle("标题");
        // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
        oks.setTitleUrl("http://sharesdk.cn");
        // text是分享文本,所有平台都需要这个字段
        oks.setText("我是分享文本");
        // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
        //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
        // url仅在微信(包括好友和朋友圈)中使用
        oks.setUrl("http://sharesdk.cn");
        // comment是我对这条分享的评论,仅在人人网和QQ空间使用
        oks.setComment("我是测试评论文本");
        // site是分享此内容的网站名称,仅在QQ空间使用
        oks.setSite(getString(R.string.app_name));
        // siteUrl是分享此内容的网站地址,仅在QQ空间使用
        oks.setSiteUrl("http://sharesdk.cn");
        // 启动分享GUI
        oks.show(this);
    }

二、第三方登陆

首先你已经有了sharesdk的环境了,只需要调用里面的对应方法就可以了。一般来说就是qq登陆,微信登陆,微博登陆。

package com.qh.banya.activity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import com.qh.banya.R;

import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;

/**
 * Created by zsj on 2016/8/10.
 */
public class LoginFragment extends Fragment implements OnClickListener, PlatformActionListener, Handler.Callback {

    private View view;
    private ImageView ivWeixin;//微信登陆
    private ImageView ivQq;//qq登陆
    private ImageView ivWeibo;//微博登陆
    private Handler handler;//定义handler进行登陆结果的回调
    private static final String TAG = "LoginFragment";
    private static final int MSG_AUTH_CANCEL = 2;
    private static final int MSG_AUTH_ERROR = 3;
    private static final int MSG_AUTH_COMPLETE = 4;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_login, container, false);
        initView();
        initData();
        return view;
    }

    private void initView() {
        ivWeixin = (ImageView) view.findViewById(R.id.iv_weixin);
        ivWeixin.setOnClickListener(this);
        ivQq = (ImageView) view.findViewById(R.id.iv_qq);
        ivQq.setOnClickListener(this);
        ivWeibo = (ImageView) view.findViewById(R.id.iv_weibo);
        ivWeibo.setOnClickListener(this);
    }

    private void initData() {
        // 初始化SDK
        ShareSDK.initSDK(getActivity());
        //注册handler
        handler = new Handler(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.iv_qq:
                // QQ
                Platform qzone = ShareSDK.getPlatform(QQ.NAME);
                authorize(qzone);
                break;
            case R.id.iv_weixin:
                // 微信登录
                // 测试时,需要打包签名;sample测试时,用项目里面的demokey.keystore
                // 打包签名apk,然后才能产生微信的登录
                Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
                authorize(wechat);
                break;
            case R.id.iv_weibo:
                // 新浪微博
                Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);
                authorize(sina);
                break;
        }

    }

    // 执行授权,获取用户信息
    // 文档:http://wiki.mob.com/Android_%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E8%B5%84%E6%96%99
    private void authorize(Platform plat) {
        plat.setPlatformActionListener(this);
        // 关闭SSO授权
        plat.SSOSetting(true);
        plat.showUser(null);
    }

    @Override
    public void onComplete(Platform platform, int action, HashMap<String, Object> hashMap) {
        if (action == Platform.ACTION_USER_INFOR) {
            Message msg = new Message();
            msg.what = MSG_AUTH_COMPLETE;
            msg.obj = new Object[] { platform.getName(), hashMap};
            handler.sendMessage(msg);
        }
    }

    @Override
    public void onError(Platform platform, int action, Throwable throwable) {
        if (action == Platform.ACTION_USER_INFOR) {
            handler.sendEmptyMessage(MSG_AUTH_ERROR);
        }
        throwable.printStackTrace();
    }

    @Override
    public void onCancel(Platform platform, int action) {
        if (action == Platform.ACTION_USER_INFOR) {
            handler.sendEmptyMessage(MSG_AUTH_CANCEL);
        } else {
            Log.e(TAG, action + "");
        }

    }

    /**
     * 对第三方登陆结果进行回调
     *
     * @param message
     * @return
     */
    @Override
    public boolean handleMessage(Message message) {
        switch (message.what) {
            case MSG_AUTH_CANCEL: {
                // 取消授权
                Toast.makeText(getActivity(), "授权操作已取消", Toast.LENGTH_SHORT).show();
            }
            break;
            case MSG_AUTH_ERROR: {
                // 授权失败
                Toast.makeText(getActivity(), "授权操作遇到错误,请阅读Logcat输出; \n 如微信登录,需要微信客户端",
                        Toast.LENGTH_SHORT).show();
            }
            break;
            case MSG_AUTH_COMPLETE: {
                // 授权成功
                Toast.makeText(getActivity(), "授权成功,正在跳转登录操作…", Toast.LENGTH_SHORT).show();
                Object[] objs = (Object[]) message.obj;
                String platform = (String) objs[0];
                //授权成功后取到的资源
                HashMap<String, Object> res = (HashMap<String, Object>) objs[1];
                // 跳转到主界面
                // 这里还需要默认给用户注册

            }
            break;
        }
        /**
         * 返回false,说明事件继续向下分发,继续调用下面的handleMessage方法
         * 返回true,说明自己消耗此事件,到此就结束了,起到拦截作用
         * 这种用法似曾相识吧,不错,跟ViewGroup分发事件很类似
         */
        return true;
    }
}

三、短信验证码

这个去mob那里下载Android Studio SMS SDK -Version,然后解压,你会发现就是jar包。

这里写图片描述

如何使用,打开哪个txt文件瞧一瞧How to use?
这里写图片描述

基本环境集成好后,然后甩代码给你们

package com.qh.banya.activity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.qh.banya.R;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

/**
 * Created by zsj on 2016/8/10.
 */
public class RegisterFragment extends Fragment {

    private View view;
    private Button btnVerication;//发送验证码
    // 填写从短信SDK应用后台注册得到的APPKEY
    private static String APPKEY = "appkey";
    // 填写从短信SDK应用后台注册得到的APPSECRET
    private static String APPSECRET = "appsecret";
    private boolean flag;//标识是否成功发送短信
    private Handler handlermarkcode;//handler
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_register, container, false);
        initView();
        initData();
        return view;
    }

    private void initView() {

        btnVerication= (Button) view.findViewById(R.id.btn_getverication);
    }

    private void initData() {
        //初始化smssdk
        SMSSDK.initSDK(getActivity(), APPKEY, APPSECRET);
        EventHandler eh = new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                handlermarkcode.sendMessage(msg);
            }
        };
        // 注册短信验证的监听
        SMSSDK.registerEventHandler(eh);
        handlermarkcode = new Handler() {
            public void handleMessage(Message msg) {
                int event = msg.arg1;
                int result = msg.arg2;
                Object data = msg.obj;
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // 短信注册成功后,返回MainActivity,然后提示新好友
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功
                        Toast.makeText(getActivity(), "提交验证码成功",
                                Toast.LENGTH_SHORT).show();
                        flag = true;
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        Toast.makeText(getActivity(), "验证码已经发送",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        ((Throwable) data).printStackTrace();
                        Toast.makeText(getActivity(), "验证码错误",
                                Toast.LENGTH_SHORT).show();
                        flag = false;
                    }
                }

            };
        };
        btnVerication.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                SMSSDK.getVerificationCode("86", "183********");

            }
        });
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterAllEventHandler();
    }
}

你会发现,你遇到莫名其妙的问题,重启你的as,然后解决后,就会完美的集成好sharesdk了,当然,你还可以去问问mob客服也是可以的。哟西,都是可以的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值