Android 关于加入Google签名计划(分配的签名文件)Google和Facebook登录不成功的问题

前提:

最近总是看到有人在问发布应用到Google Play之后,签名改变了,然后导致登录不成功的问题。之前没怎么在意,但是,问的人多了之后就想着,既然问的人这么多,那么直接写一篇文章来统一说明一下解决方式。

首先

之前加入到Google签名计划是一个可选项,但是,最近发布的应用好像默认就会分配一个新的签名。这就给我们测试增加了难度,需要使用Google新分配的签名文件的SHA1来重新配置登录需要的文件。这里的登录不仅指的是Google登录还有Facebook登录,因为签名变了之后SHA1也会改变。所以,Google需要更新Android版的AuthID的SHA1,Face book需要更新新的散列密钥

说了那么多,来看看自己的签名和Google分配的签名

Google签名.png

如上图所示,可以看到Google分配的签名,这里面会生成新的SHA1MD5SHA-256,那么我们所需要的是什么呢,做过google登录的都知道需要SHA1,那么问题来了。需要用新的SHA1还是自己原来的SHA1呢?当然是要用Google分配的SHA1了。因为我们需要在Google Play上面发布应用。

其次

上面说了那么多的原因,那么下面来看解决办法。

  • 关于Google登录的配置,可以看这篇Google登录配置,如果配置过了,那么看一下如何修改,我们只需要修改Android版的AuthID,并且修改里面对应的SHA1

    加入Google签名后修改SHA1的地方.png

    注意:SHA1这里需要更换成Google分配的签名的SHA1其他的保持不变。

  • 也有同仁遇到过Facebook登录失败的问题,说的是散列密钥错误。那么,我们的散列密钥是怎么生成的呢?

    keytool -exportcert -alias (签名的别名) -keystore (签名文件路径) | openssl sha1 -binary | openssl base64
    

上面的就是我们生成散列密钥的方法,需要签名的别名和路径,当然还要有密钥。当我们有签名的时候当然会很容易的生成,那么Google分配的签名呢?我们怎么知道别名?怎么知道路径?怎么知道密钥?别担心,这里给你解决方法。

  • 1、这里我根据当前网址的JS源码的算法,自己写出了一套JAVAkotlin源码,当前网址是如下图所示的用法
    根据SHA1生成散列密钥.png

如上图所示,我们只需要填入Google分配给我们的新的SHA1即可生成散列密钥然后填入到Facebook的后台配置中。

  • 2、代码中的用法是如何的呢?且看下面的源码

java版的

   /**
    * 转换工具类
    */
   public class ConvertUtil {

   /**
    * 输入内容
    *
    * @param input   输入的内容
    * @param isCheck 是否取消选择OX
    * @return 返回取消OX后的值
    */
  private static String input(String input, boolean isCheck) {
    input = input.toUpperCase();
    if (isCheck) {
        Pattern pattern = Pattern.compile("0X");
        Matcher matcher = pattern.matcher(input);
        input = matcher.replaceAll("");
    }
    Pattern pattern = Pattern.compile("[^A-Fa-f0-9]");
    Matcher matcher = pattern.matcher(input);
    input = matcher.replaceAll("");
    return input;
  }

   /**
    * 转换
    *
    * @param input   输入的内容
    * @param isCheck 是否取消选择OX
    * @return 返回散列密钥
    */
  public static String convert(String input, boolean isCheck) {
    String array;
    String result = input(input, isCheck);
    if (result.length() % 2 != 0) {
        return "123";
    }
    int[] mArray = new int[result.length() / 2];
    for (int index = 0; index < result.length() / 2; index++) {
        String h = result.substring(index * 2, index * 2 + 2);
        Log.e("TA", h + "");
        mArray[index] = Integer.parseInt(h, 16);
    }
    array = convertTo64(mArray);
    return array;
  }

  /**
   * 转换为64为的String字符串
   *
   * @param input int 数组
   * @return 转换后的散列密钥
   */
  private static String convertTo64(int[] input) {
    String base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    String ret = "";
    int i = 0;
    int j = 0;
    int[] char_array_3 = new int[3];
    int[] char_array_4 = new int[4];
    int in_len = input.length;
    int pos = 0;

    while (in_len-- != 0) {
        char_array_3[i++] = input[pos++];
        if (i == 3) {
            char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
            char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
            char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
            char_array_4[3] = char_array_3[2] & 0x3f;

            for (i = 0; (i < 4); i++)
                ret += base64_chars.charAt(char_array_4[i]);
            i = 0;
        }
    }

    if (i != 0) {
        for (j = i; j < 3; j++)
            char_array_3[j] = 0;

        char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
        char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
        char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
        char_array_4[3] = char_array_3[2] & 0x3f;

        for (j = 0; (j < i + 1); j++)
            ret += base64_chars.charAt(char_array_4[j]);

        while ((i++ < 3))
            ret += '=';

    }
    return ret;
   }


  }

kotlin版的如下

 /**
  * 转换工具类
  */
 object ConvertUtil {

/**
 * 转换
 *
 * @param input   输入的内容
 * @param isCheck 是否取消选择OX
 * @return 返回散列密钥
 */
fun convert(input: String, isCheck: Boolean): String {
    val array: String
    val result = input(input, isCheck)
    if (result.length % 2 != 0) {
        return "123"
    }
    val mArray = IntArray(result.length / 2)
    for (index in 0 until result.length / 2) {
        val h = result.substring(index * 2, index * 2 + 2)
        mArray[index] = h.toInt(16)
    }
    array = convertTo64(mArray)
    return array
}

/**
 * 输入内容
 *
 * @param input   输入的内容
 * @param isCheck 是否取消选择OX
 * @return 返回取消OX后的值
 */
private fun input(input: String, isCheck: Boolean): String {
    var input = input
    input = input.toUpperCase()
    if (isCheck) {
        val pattern = Pattern.compile("0X")
        val matcher = pattern.matcher(input)
        input = matcher.replaceAll("")
    }
    val pattern = Pattern.compile("[^A-Fa-f0-9]")
    val matcher = pattern.matcher(input)
    input = matcher.replaceAll("")
    return input
}


/**
 * 转换为64为的String字符串
 *
 * @param input int 数组
 * @return 转换后的散列密钥
 */
private fun convertTo64(input: IntArray): String {
    val base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    var ret = ""
    var i = 0
    var j = 0
    val char_array_3 = IntArray(3)
    val char_array_4 = IntArray(4)
    var in_len = input.size
    var pos = 0
    while (in_len-- != 0) {
        char_array_3[i++] = input[pos++]
        if (i == 3) {
            char_array_4[0] = char_array_3[0] and 0xfc shr 2
            char_array_4[1] =
                (char_array_3[0] and 0x03 shl 4) + (char_array_3[1] and 0xf0 shr 4)
            char_array_4[2] =
                (char_array_3[1] and 0x0f shl 2) + (char_array_3[2] and 0xc0 shr 6)
            char_array_4[3] = char_array_3[2] and 0x3f
            i = 0
            while (i < 4) {
                ret += base64_chars[char_array_4[i]]
                i++
            }
            i = 0
        }
    }
    if (i != 0) {
        j = i
        while (j < 3) {
            char_array_3[j] = 0
            j++
        }
        char_array_4[0] = char_array_3[0] and 0xfc shr 2
        char_array_4[1] = (char_array_3[0] and 0x03 shl 4) + (char_array_3[1] and 0xf0 shr 4)
        char_array_4[2] = (char_array_3[1] and 0x0f shl 2) + (char_array_3[2] and 0xc0 shr 6)
        char_array_4[3] = char_array_3[2] and 0x3f
        j = 0
        while (j < i + 1) {
            ret += base64_chars[char_array_4[j]]
            j++
        }
        while (i++ < 3) ret += '='
    }
    return ret
}
}
  • 3、关于Facebook如何配置,如果不太明白的话可以看看这篇:Facebook 配置,关于如何配置散列密钥?可以看下图
    加入google签名计划后的散列密钥.png

    如上图所示这里的散列密钥换成刚生成的即可。

最后

好了,到此我们今天的文章就结束了。关于如何解决Google和Facebook加入签名计划后不能成功登录的问题就到此结束了。如果还有其他问题可以加群探讨,群号是:493180098

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,366评论 0 6
  • 概述 这个玩意简单说起来很简单,详细描述起来很复杂,复杂在什么地方呢,首先有一块陌生的知识点,包括但不限于证书,数...
    千山万水迷了鹿阅读 7,426评论 3 18
  • PKI 基础知识 (摘自Microsoft Windows 2000 Server白皮书,2000年7月5日发布)...
    right_33cb阅读 951评论 0 1
  • 初春寒雨 云合青霭远山苍, 幕重似绸湘水茫。 清钟舟荡波不过, 一夜风寒听雨长。 仲春宿雨 春来只觉宿雨长, 枝上...
    桨影铭阅读 284评论 3 4
  • 我想告诉你大连又下雪了,就像你离开的那个夜晚,漫天的雪花覆盖了五彩的霓虹,天与地只剩一片白。你说你讨厌雪,...
    搞怪小孩阅读 189评论 0 2