腾讯微博API IOS-SDK-2.0开发初探

                                     腾讯微博API IOS-SDK-2.0开发初探

——IOS平台登陆腾讯微博功能详解

本篇文章记录下了笔者在使用腾讯微博IOS平台的SDK开发包开发iphone端APP时,所遇到的种种问题以及解决方法,就此类开发项目,甚至说IOS平台的项目开发而言,笔者本人也是一个新手,目前也是在逐步的学习、探索之中,写出此篇文章,旨在与诸多开发同人交流,记录下自己在工作、学习的过程中点滴的心得,如有纰漏、不当之处,望请诸位看官多多指点不吝赐教。

在刚开始接触腾讯微博SDK的时候,笔者第一印象对于腾讯微博的demo小样就表示一头雾水,当然,可能笔者才疏学浅见识不多,只是针对本人来说基本没有有可以通过demo小样即可马上理解的API,对于给出的各种功能端口的测试也是十分费解,为何都是如此混乱的一堆代码?为何不是常见的用户界面?而最令人难过的还是官方对此并未给出任何的解释说明。。。在开发指南中,甚至连如何配置SDK开发包都未作说明。。。当然可是文档的编写者认为配置项目这种基本操作无需多言。。。在具体API的讲解中,指南里只是简单的贴出了API中的数个函数原型的截图,和效果图,仅有一个登陆和发表的示例,而其中讲解的文字不足百字。。。想要使用API进行开发的开发者来说,这寥寥数语无异于杯水车薪。。。。而过于稀少的示例,以及demo中令人费解的演示过程也让整个SDK开发包在一个刚接触它的人眼中显得就像是一个反编编译过的代码一样无法理解- –

在经过数日努力之后,终于逐渐了解了其中少数API的具体用法,以及授权协议在IOS平台上具体应该是如何操作的,今天我们就首先来说说,IOS上腾讯微博API中登陆相关的部分

在API中目前我发现的登陆方式有两种,第一种即是在官方提供的开发指南中演示的API,直接在自己的按钮事件中调用该API就会自动弹出登陆的页面,而另一种则是使用一个名为AccessToken的字符串标识进行登陆,该标识是在用户登陆过之后,可以通过SDK开发包中的API获取到的,具体如何获取呢?下面我来详细叙述一下如何使用AccessToken登陆腾讯微博。而在这之前,请看官先确认已经在腾讯开放平台上面创建APP并且获得了AppID以及AppSecret,并且已经把官方提供的开发指南中极其简单的调用登陆窗口登陆的方式已经掌握。

使用AccessToekn登陆的API函数原型如下:

对于刚接触此类API的人来说,你们看到这个API时的第一反应应该和我一样,根据名称来看的确是一个登陆函数,但是AccessToken时什么?Expiredfimet又是什么,OpenID呢?RefreshToken呢?他们看起来好像跟我们没什么关系,是从哪得来呢?莫非API中也存在游戏中RMB战士一样的RMB函数么?好吧,或许有,但我们见到的还并不是,因为腾讯如果真的想要保留RMB函数,自然不会把源代码都给你看了。

AccessToken是用户在登陆授权之后,可以通过API中的方法向服务器申请的一个字符串标识。

Expiredfimet是代表本次AccessToken的失效时间,他是一个NSTimeInterval类型的对象,而实际上他并不是对象,是基本型,其实是double类型,是由c定义的,该类型,他可以用以标示两个日期之间间隔的时间,单位是以秒来计算,当然,在这里需要传送的参数时一个字符串

OpenID是一个类似于AccessToken的字符串标识,就像注释上所说的,这是一个用户的唯一标识,而且在很多其他功能的API中一样也需要这个OpenID,至于他与AccessToken有什么区别,为什么要需要这样一个标识请原笔者的无能。。。尚未参透。。。

RefreshToken同样也是一个字符串类型的标识,它的主要功能是在使用API方法向服务器请求刷新AccessToken时使用至于它更多的详解,笔者也同OpenID一样尚未研究透彻。。。

知道了这4个参数分别是什么了,那么我该怎么来取得这4个参数呢,之前既然说过AccessToken是在成功登陆之后分配的,那么自然不管怎么取得,我们可以确定的是必须在调用登陆窗口的API的成功登陆回调函数中来实现他时最为妥当的。笔者在研究如何取得这4个参数的时候首先想到的是回调函数中是否会有参数提供,当然这个想法一闪而过就被我否决了,因为在开发指南的示例回调函数中并未有设置参数,所以笔者并未多做尝试。即使有参数,无法知道会给鱼的参数列表我们也时无法使用这些参数的。。。其次笔者想到的时类内会不会有属性,当我看到确认了这个想法之后,我觉得开始有了眉目,那么会不会在用户登陆成功后这些属性已经被赋值了呢,我在反复的查询各种API的过程中发现的确有类似设置这些属性函数的方法在登陆的过程中呗调用过,然而我却在登陆属性中取值失败了,但是并非一无所获,我取得了到了一个RefreshToken,没错,这个值存在了,那么就有下文了。

笔者在翻阅API代码的时候发现了一个函数,叫做refreshAccessToken,当我看到这个函数之后,我才真的看到了希望,函数原型如下:

AppKey是在官方申请应用时所分配的一个字符串标示,在我们按照官方给出的开发指南使用调用登陆窗口方法进行登陆的时候相信大家已经很明确这个字符串标识是什么了,我也就不再多加叙述。而refreshtoken我们之前提到过在登陆成功之后,我们仅能取得到的一个字符串标示。grantType经过笔者了解,此处是一个询问授权类型的参数,但是他的参数是一个字符串让人很难知道该如何使用(为何不做成枚举呢。。。)但是好在笔者通过翻阅源码发现在这里我们只要给出固定的值@”refresh_token”即可。

现在如何调用该函数我们理解了,而取出的AccessToken又在哪里呢?类内的属性经过测试发现依然没有被赋值,而参数中亦没有出参可以使用,于是笔者就试着输出一下返回值的NSString输出结果为下:

2012-12-17 09:07:25.739 GroupSend[473:11c03] relutStr:access_token=42d48d39554685347c3798a3c4d2c70d&expires_in=604800&refresh_token=1fd107582e266bd9794b9f552743486a&openid=70b2b4763fd2fc94ac905ef2f1c1db2b&name=elecxiaoxuan&nick=均衡教主&state=

是的就如你所看到的,这个并非一个值的字符串,而是一连串键值,对与我们来说有两个消息,好消息时,我们终于找到了获取accessToken的办法,并且还取得了其他所有相关的键值,甚至还会包括用户昵称。但坏消息是,没错你需要写一个虽然不是很长但是很麻烦很恼人的字符串提出函数。。。。。在此我将自己用来提取此字符串中参数的方法公开以供大家参考:

//根据刷新返回字符串提取各种值

-(NSDictionary *)getParameterForString:(NSString *) parameter

{

    @autoreleasepool {

        NSMutableDictionary  *reslut=[[NSMutableDictionary  alloc] init];

        NSMutableArray *keys=[[NSMutableArray alloc] init];

        NSMutableArray *values=[[NSMutableArray alloc] init];

        int lastIndex=0;

        for (int i=0; i<parameter.length; i )

        {

            if(“=”==[parameter characterAtIndex:i])

            {

                [keys addObject:[parameter substringWithRange:NSMakeRange(lastIndex, i-lastIndex)]];

                NSLog(@”键:%@”,[keys objectAtIndex:[keys count]-1]);

                lastIndex=i 1;

            }

            if (“&”==[parameter characterAtIndex:i])

            {

                [values addObject:[parameter substringWithRange:NSMakeRange(lastIndex, i-lastIndex)]];

                NSLog(@”值:%@”,[values objectAtIndex:[keys count]-1]);

                lastIndex=i 1;

            }

        }

        if(keys.count>values.count)

        {

            [keys removeLastObject];

        }

        [reslut addEntriesFromDictionary:[[NSDictionary alloc] initWithObjects:values forKeys:keys]];

        return reslut;

    }

}

//根据getParameterForString方法返回的Dictionary提取键值保存到类内属性

-(void)setParameterToProperty:(NSDictionary *) parameterReslut

{

    self.SuccessToken=[parameterReslut objectForKey:@”access_token”];

    self.ExpireTime=[parameterReslut objectForKey:@”expires_in”];

    self.FlashToken=[parameterReslut objectForKey:@”refresh_token”];

    self.OpenId=[parameterReslut objectForKey:@”openid”];

}

 

本文至此也就告一段落了,取得各参数之后自然使用AccessToken进行登陆的方法也就简洁明了了,该函数并不会弹出一些窗口,而是调用后直接连接服务器,但是一样会有登陆成功以及登陆失败的回调函数,最后在此建议大家使用和调用登陆界面相同的回调函数,因为如此可以在每次用户开启登陆时都进行一次AccessToken的刷新,可以减少用户因为AccessToken过期而需要重新登陆的麻烦。

微信公共平台简单介绍

经常使用微信的童鞋最近有没有注意到,

有些公共的账号(如果壳网,苹果迷,精彩语录等)定期会发送一些相关信息。

这些每天发送的信息,会吸引一些对该类信息感兴趣的忠实用户。

从而达到,为品牌黏住核心用户以及吸引能多用户的效果。

下面简单介绍一下微信公共平台:

1 创建微信公共账号 http://mp.weixin.qq.com/

微信为各企业提供了公共账号注册服务,方面企业在微信平台上推广自己的品牌。

只要使用未登陆过微信的QQ账号即可登陆平台。

2 该平台提供对“实时消息”,“用户”,“群发消息”,“素材”等的管理功能。

3 在设置中,可进行头像,二维码等个性信息的修改。

其中如果想申请认证,订阅者必须为500人以上–; 路还很长。。。

4 使用智能手机,登陆到微信客户端,扫描雪印笔记二维码即可加为公共好友。