蜀将何在(第三方登录和分享相关和gcm)

有时候我们开发,可能会遇到一些系统化的难题,会去请一些第三方的来帮忙,调用他们的api,导入他们的SDK等等,由于我司的app是针对海外市场的,所以有些登录,分享,推送都要用到国外的第三方相关。这里小谈一下自己遇到的一些问题

1 登录

这里说说自己遇到的一些问题

  • Facebook+
  • Google+

Facebook以前的app有老版本,但是最新的都已经更新了很大了,故决定重新撸一个。Facebook由于一些appId,token,权限,包名等等之类的,都已经申请好了,所以这些不用担心,顿时心里感觉轻松不少,Facebook的登录相对简单一点,到时候直接去请CallbackManager(末将在此)这员大将就可以搞定一切。只是注意一下登录需要开通的权限即可(末将在此

1
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));

Google+就有些少许麻烦了,其实如果你不需要tokenId的话倒可以直接跑demo,ShareSDK都可以获取你需要的一些基本登录信息,但是如果服务器这边要根据你的登录tokenId去做一些操作,这样就不行,所以如果要拿TokenId,准备工作就比较繁琐(末将在此),主要分下面几步:

  • 打开网页(对不起,看到大家有些严肃,来调节气氛,言归正传)
  • Google Developer Console开启Google+的相关API,其实很多时候你需要用google的api都要在这里开启和管理(末将在此
  • 去获取获取一个configuration file,填写包名和你的app名字啥的,然后到时候生成的是一个json文件,要拷到你的app目录里面(google文档上面写的是 app/ or mobile/下,笔者比较求稳,单独建立了一个文件夹来放json文件,其他文件夹大家有空可以试试)(末将在此
  • 获取tokenId权限(其他权限也在这边)如下:
    1
    2
    3
    4
    GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken(context.getString(R.string.server_client_id))
    .requestEmail()
    .build();

以上就是Google+登录的重点,开始一直没有把那个配置文件当回事,重要的事儿说三遍:一定要记住,json文件,json文件,json文件!

2 分享

分享其实没什么说的,其实有时候偷懒可以用上面说的ShareSDK,有些人说这个坑,不过的确比较广泛地支持了国内外主流的分享,还是算可以的了,只要自己注意一些规范和用法,有些坑可以自己去填的,笔者算是和ShareSDK打过很多次交道的人了,和里面的android技术支持平台的几个客服支持都比较熟了。。

下面我拿Facebook说一下
Facebook的分享(末将在此)有些与众不同,因为他是不能传递text这个字段的,它的分享只有三种:

  • Links
  • Photos
  • Videos

因为由于后面两种的局限性,所以一般就首选Links,顾名思义,就是把title, text, url都传入到一个对象里面,然后Facebook给你打包一个link发出去,,而Facebook比较牛的是可以自动去找出你分享的url里面的图片,然后显示在分享link的链接上,不过有个坑要注意,因为Facebook对url的“合法性”把控特别严厉,所以有时候你分享的图片url还是生成的url,会分享不出去,说不合法,这个Facebook专门有一个检测的工具(这个忘了地方了,到时候大家可以自己去查查。。)

ShareSDKFacebook只能网页分享(即不能客户端分享,就是即使检测到你手机上装有客户端,也只会调用网页分享),不过感觉略屌的是ShareSDKFacebook分享可以直接传入分享文本,而不需要将其放入Links的url里面,问了那边技术怎么做到的,没给我说😢

自己闲暇之余也抽空写了一个用ShareSDK来第三方登录和分享的ShareSdkDemo

3 推送

推送方面如果自己来写的话,不管从时间或者成本来算都是比较大的,所以国内里面用过最多的是JPush和个推,米推等等,但是开头也说过我们的应用是国外的,所以得找一个“internationalization”一点的推送:GCM(Google Cloud Message)(末将在此)

其实用法还好,因为又是google的东西,所以要经过上面Google Plus登录的那几个步骤,只是也要涉及到json文件configuration file,如果用的同一个包名和应用名,里面其实是可以并列开启几个服务的,所以不影响之前的json文件,到时候覆盖即可。

GCM这些github上面都有google的sample,可以自行去搜搜,但是有个问题一定要记住,因为做过推送的人都知道,推送有“通道”这个概念,而在GCM 里面叫做“topics”,而且:

GCM 的通道只能以“/topics/”作为根目录且后面不能再出现其他目录
比如:我给你评论推送只能是 “/topics/message-commit”
而不能是“/topics/message/commit”或者“/message/commit”

以上是最近使用第三方的几个小总结,当然始终记住,总结永远只是手段而不是目的。