android[友盟+第三方登录微信登录]

常见的第三方登录有QQ,微博,微信登录,今天记录一下集成微信登录的几个步骤。这里使用的是轮子哥的umeng库。
首先需要准备的当然是各种AppID,AppKey,AppSecret了。
1.先去友盟注册一个账号,https://passport.umeng.com/login。
2.注册成功之后添加自己的应用,拿到友盟appKey,这个会在代码集成的时候用到。

appKey

3.然后我们需要到微信的开放平台注册开放平台账号,注册成功之后登录到管理中心,创建自己的移动应用,移动应用签名信息的格式,我这里是数字和小写字母没有冒号,上传应用审核需要几个工作日的时间,所以如果有微信登录功能的话可以尽早上传。审核完成之后就可以拿到微信的AppIDAppSecret但要做微信登录的话只有这些还不行,我们还需要进行开发者资质认证,这一步需要公司的配合上传一些公司的资料还有300元的认证费用。完成到这一步之后就可以去写代码了。
AppID,AppSecret

4.使用umeng库的时候把gradle里面的implementation改成api,为的是让主app也可以使用libs里面的代码。
umeng build.gradle

5.在包名的同级目录下创建WXEntryActivity.java
位置

6.在主app的manifest.xml的application节点里面添加下面三个meta-data
友盟 微信meta-data

在app的build.gradle文件中添加

android {
    defaultConfig {
        ndk {
            // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
            abiFilters 'armeabi'//,'armeabi-v7a'
        }
    }
    buildTypes {
        release {
            minifyEnabled true
        }
    }
    //全局配置文件
    configurations.all {
    }
    lintOptions {
        abortOnError false
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    // 执行配置
    applicationVariants.all { variant ->
        // AndroidManifest 输出配置
        variant.outputs[0].processManifest.doLast {
            def manifestFile = "${manifestOutputDirectory}/AndroidManifest.xml"
            def updatedContent = new File(manifestFile).getText('UTF-8')
                    .replaceAll("UMENG_APPKEY_VALUE", "申请的友盟appKey") // 友盟 AppKey
            //.replaceAll("QQ_APPID_VALUE", "100424468") // QQ AppId
            //.replaceAll("QQ_APPKEY_VALUE", "c7394704798a158208a74ab60104f0ba") // QQ Key
                    .replaceAll("WX_APPID_VALUE", "申请的微信AppID") // 微信 AppId
                    .replaceAll("WX_APPKEY_VALUE", "申请的微信AppSecret") // 微信 Key
            new File(manifestFile).write(updatedContent, 'UTF-8')
        }
    }

}

在App.java中对UmengClient初始化

    @Override
    public void onCreate() {
        super.onCreate();
        initUmeng();
    }
    /**
     * 第三方登录
     */
    private void initUmeng() {
        UmengClient.init(this);
    }

看一下UmengClient.java的init方法下面做了什么

/**
 * 初始化友盟相关 SDK
 */
public static void init(Application application) {
    try {
        Bundle metaData = application.getPackageManager().getApplicationInfo(application.getPackageName(), PackageManager.GET_META_DATA).metaData;
        // 友盟统计,API 说明:https://developer.umeng.com/docs/66632/detail/101814#h1-u521Du59CBu5316u53CAu901Au7528u63A5u53E32
        UMConfigure.init(application, UMConfigure.DEVICE_TYPE_PHONE, "");
        // 初始化各个平台的 Key
        PlatformConfig.setWeixin(String.valueOf(metaData.get("WX_APPID")), String.valueOf(metaData.get("WX_APPKEY")));
        //PlatformConfig.setQQZone(String.valueOf(metaData.get("QQ_APPID")), String.valueOf(metaData.get("QQ_APPKEY")));
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}

完成到这一步之后我们就一个到登录界面使用微信登录的方式了

public class LoginActivity extends Activity implements UmengLogin.OnLoginListener {
    @Override
    public int getLayoutId() {
        return R.layout.act_login;
    }
    @Override
    public void initViews(Bundle bundle) {
        loginViaQQ.setOnClickListener(v -> {
            //UmengClient.login(this, Platform.QQ, this);
        });
        loginViaWX.setOnClickListener(v -> UmengClient.login(this, Platform.WECHAT, this));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 友盟登录回调
        UmengClient.onActivityResult(this, requestCode, resultCode, data);
    }

    @Override
    public void onStart(Platform platform) {
        Log.i("login", "start:");
    }

    @Override
    public void onSucceed(Platform platform, UmengLogin.LoginData data) {
        // 判断第三方登录的平台
        switch (platform) {
            case QQ:
                break;
            case WECHAT:
                break;
            default:
                break;
        }
        Log.i("login", "昵称:" + data.getName());
        Log.i("login", "性别:" + data.getSex());
        Log.i("login", "id:" + data.getId());
        Log.i("login", "token:" + data.getToken());
        Log.i("login", "头像:" + data.getIcon());
        showToast("授权成功");
    }

    @Override
    public void onError(Platform platform, Throwable t) {
        Log.i("login onError", "onError: " + t.getMessage());
        showToast("授权失败");
    }

    @Override
    public void onCancel(Platform platform) {
        showToast("授权取消");
    }
}

这么一来不出意外的话我们就能在onSucceed里面看到登录成功微信返回给我们的数据了。

附 友盟集成相关问题

你可能感兴趣的:(android[友盟+第三方登录微信登录])