转载请标明:转载自【小枫栏目】,博文链接:http://blog.youkuaiyun.com/rexuefengye/article/details/9833851
简介
本文档主要介绍接入QQ平台的一些内容,便于查阅和使用。
第一步:搭建QQSDK
2.下载SDK后,打开文件如图:
3.打开《iOS SDK使用说明(MAC).webloc》按流程搭建好SDK。
1.更改类
AppController.mm
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
- return [TencentOAuth HandleOpenURL:url];
- }
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
- return [TencentOAuth HandleOpenURL:url];
- }
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuth HandleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuth HandleOpenURL:url];
}
2.添加类
sdkCall.h
sdkCall.h
- #import <Foundation/Foundation.h>
- #import <TencentOpenAPI/TencentOAuth.h>
- @interface sdkCall : NSObject<TencentSessionDelegate, TencentApiInterfaceDelegate>
- @property (nonatomic, retain)TencentOAuth *tencentOAuth;
- @property (retain, nonatomic) UITextView *labelTitle;
- @property (retain, nonatomic) UITextView *labelAccessToken;
- @property (retain, nonatomic) NSArray* permissions;
- @end
#import <Foundation/Foundation.h>
#import <TencentOpenAPI/TencentOAuth.h>
@interface sdkCall : NSObject<TencentSessionDelegate, TencentApiInterfaceDelegate>
@property (nonatomic, retain)TencentOAuth *tencentOAuth;
@property (retain, nonatomic) UITextView *labelTitle;
@property (retain, nonatomic) UITextView *labelAccessToken;
@property (retain, nonatomic) NSArray* permissions;
@end
sdkCall.m
- //
- // sdkCall.m
- // QQLogin
- //
- // Created by IDEA-MAC03 on 13-8-7.
- //
- //
- #import "sdkCall.h"
- static sdkCall *g_instance = nil;
- @implementation sdkCall
- + (sdkCall *)getinstance
- {
- @synchronized(self)
- {
- if (nil == g_instance)
- {
- //g_instance = [[sdkCall alloc] init];
- g_instance = [[super allocWithZone:nil] init];
- // [g_instance setPhotos:[NSMutableArray arrayWithCapacity:1]];
- // [g_instance setThumbPhotos:[NSMutableArray arrayWithCapacity:1]];
- }
- }
- return g_instance;
- }
- + (id)allocWithZone:(NSZone *)zone
- {
- return [[self getinstance] retain];
- }
- -(id)init
- {
- _tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];
- _tencentOAuth.redirectURI = @"www.qq.com";
- //_permissions = [[NSArray arrayWithObjects:@"get_user_info", @"add_share", nil] retain];
- return self;
- }
- //登录时,调用TencetnOAuth对象的authorize方法:
- -(void)login
- {
- NSArray* permissions = [NSArray arrayWithObjects:
- kOPEN_PERMISSION_GET_USER_INFO,
- kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
- kOPEN_PERMISSION_ADD_ALBUM,
- kOPEN_PERMISSION_ADD_IDOL,
- kOPEN_PERMISSION_ADD_ONE_BLOG,
- kOPEN_PERMISSION_ADD_PIC_T,
- kOPEN_PERMISSION_ADD_SHARE,
- kOPEN_PERMISSION_ADD_TOPIC,
- kOPEN_PERMISSION_CHECK_PAGE_FANS,
- kOPEN_PERMISSION_DEL_IDOL,
- kOPEN_PERMISSION_DEL_T,
- kOPEN_PERMISSION_GET_FANSLIST,
- kOPEN_PERMISSION_GET_IDOLLIST,
- kOPEN_PERMISSION_GET_INFO,
- kOPEN_PERMISSION_GET_OTHER_INFO,
- kOPEN_PERMISSION_GET_REPOST_LIST,
- kOPEN_PERMISSION_LIST_ALBUM,
- kOPEN_PERMISSION_UPLOAD_PIC,
- kOPEN_PERMISSION_GET_VIP_INFO,
- kOPEN_PERMISSION_GET_VIP_RICH_INFO,
- kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO,
- kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO,
- nil];
- [_tencentOAuth authorize:permissions inSafari:NO];
- //[[[sdkCall getinstance] _tencentOAuth] authorize:permissions inSafari:NO];
- }
- //登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。 登录成功:
- -(void)tencentDidLogin
- {
- _labelTitle.text = @"登录完成";
- if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]) {
- // 记录登录用户的OpenID、Token以及过期时间
- _labelAccessToken.text = _tencentOAuth.accessToken;
- NSLog(@"*********************");
- NSLog(_tencentOAuth.accessToken);
- }
- else
- {
- _labelAccessToken.text = @"登录不成功 没有获取accesstoken";
- }
- }
- //非网络错误导致登录失败:
- -(void)tencentDidNotLogin:(BOOL)cancelled
- {
- if (cancelled)
- {
- _labelTitle.text = @"用户取消登录";
- }
- else
- {
- _labelTitle.text = @"登录失败";
- }
- }
- //网络错误导致登录失败:
- -(void)tencentDidNotNetWork
- {
- _labelTitle.text=@"无网络连接,请设置网络";
- }
- - (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth
- {
- }
- @end
//
// sdkCall.m
// QQLogin
//
// Created by IDEA-MAC03 on 13-8-7.
//
//
#import "sdkCall.h"
static sdkCall *g_instance = nil;
@implementation sdkCall
+ (sdkCall *)getinstance
{
@synchronized(self)
{
if (nil == g_instance)
{
//g_instance = [[sdkCall alloc] init];
g_instance = [[super allocWithZone:nil] init];
// [g_instance setPhotos:[NSMutableArray arrayWithCapacity:1]];
// [g_instance setThumbPhotos:[NSMutableArray arrayWithCapacity:1]];
}
}
return g_instance;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [[self getinstance] retain];
}
-(id)init
{
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];
_tencentOAuth.redirectURI = @"www.qq.com";
//_permissions = [[NSArray arrayWithObjects:@"get_user_info", @"add_share", nil] retain];
return self;
}
//登录时,调用TencetnOAuth对象的authorize方法:
-(void)login
{
NSArray* permissions = [NSArray arrayWithObjects:
kOPEN_PERMISSION_GET_USER_INFO,
kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
kOPEN_PERMISSION_ADD_ALBUM,
kOPEN_PERMISSION_ADD_IDOL,
kOPEN_PERMISSION_ADD_ONE_BLOG,
kOPEN_PERMISSION_ADD_PIC_T,
kOPEN_PERMISSION_ADD_SHARE,
kOPEN_PERMISSION_ADD_TOPIC,
kOPEN_PERMISSION_CHECK_PAGE_FANS,
kOPEN_PERMISSION_DEL_IDOL,
kOPEN_PERMISSION_DEL_T,
kOPEN_PERMISSION_GET_FANSLIST,
kOPEN_PERMISSION_GET_IDOLLIST,
kOPEN_PERMISSION_GET_INFO,
kOPEN_PERMISSION_GET_OTHER_INFO,
kOPEN_PERMISSION_GET_REPOST_LIST,
kOPEN_PERMISSION_LIST_ALBUM,
kOPEN_PERMISSION_UPLOAD_PIC,
kOPEN_PERMISSION_GET_VIP_INFO,
kOPEN_PERMISSION_GET_VIP_RICH_INFO,
kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO,
kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO,
nil];
[_tencentOAuth authorize:permissions inSafari:NO];
//[[[sdkCall getinstance] _tencentOAuth] authorize:permissions inSafari:NO];
}
//登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。 登录成功:
-(void)tencentDidLogin
{
_labelTitle.text = @"登录完成";
if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]) {
// 记录登录用户的OpenID、Token以及过期时间
_labelAccessToken.text = _tencentOAuth.accessToken;
NSLog(@"*********************");
NSLog(_tencentOAuth.accessToken);
}
else
{
_labelAccessToken.text = @"登录不成功 没有获取accesstoken";
}
}
//非网络错误导致登录失败:
-(void)tencentDidNotLogin:(BOOL)cancelled
{
if (cancelled)
{
_labelTitle.text = @"用户取消登录";
}
else
{
_labelTitle.text = @"登录失败";
}
}
//网络错误导致登录失败:
-(void)tencentDidNotNetWork
{
_labelTitle.text=@"无网络连接,请设置网络";
}
- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth
{
}
@end
- #ifndef __QQLogin__HSpriteCPP__
- #define __QQLogin__HSpriteCPP__
- #include "cocos2d.h"
- using namespace cocos2d;
- class HSpriteCPP:public cocos2d::CCSprite {
- public:
- static HSpriteCPP* hspriteWithFile(const char *spName);
- void myInit();
- virtual ~HSpriteCPP();
- };
- #endif /* defined(__QQLogin__HSpriteCPP__) */
#ifndef __QQLogin__HSpriteCPP__
#define __QQLogin__HSpriteCPP__
#include "cocos2d.h"
using namespace cocos2d;
class HSpriteCPP:public cocos2d::CCSprite {
public:
static HSpriteCPP* hspriteWithFile(const char *spName);
void myInit();
virtual ~HSpriteCPP();
};
#endif /* defined(__QQLogin__HSpriteCPP__) */
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- #include "HSpriteOC.h"
- #include "sdkCall.h"
- #include "sdkDemoViewController.h"
- #endif
- #include "HSpriteCPP.h"
- HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName)
- {
- HSpriteCPP *pobSprite = new HSpriteCPP();
- if (pobSprite && pobSprite->initWithFile(spName)) {
- pobSprite->myInit();
- pobSprite->autorelease();
- return pobSprite;
- }
- CC_SAFE_DELETE(pobSprite);
- return NULL;
- }
- void HSpriteCPP::myInit()
- {
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- //iOS代码
- [[sdkCall alloc] init];
- [[sdkCall alloc] login];
- #else
- #endif
- }
- HSpriteCPP::~HSpriteCPP()
- {
- }
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "HSpriteOC.h"
#include "sdkCall.h"
#include "sdkDemoViewController.h"
#endif
#include "HSpriteCPP.h"
HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName)
{
HSpriteCPP *pobSprite = new HSpriteCPP();
if (pobSprite && pobSprite->initWithFile(spName)) {
pobSprite->myInit();
pobSprite->autorelease();
return pobSprite;
}
CC_SAFE_DELETE(pobSprite);
return NULL;
}
void HSpriteCPP::myInit()
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
//iOS代码
[[sdkCall alloc] init];
[[sdkCall alloc] login];
#else
#endif
}
HSpriteCPP::~HSpriteCPP()
{
}
3.运行测试:
HelloWorldScene.h
- #ifndef __HELLOWORLD_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
- #include "cocos2d.h"
- class HelloWorld : public cocos2d::CCLayer
- {
- public:
- // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
- virtual bool init();
- // there's no 'id' in cpp, so we recommend to return the class instance pointer
- static cocos2d::CCScene* scene();
- // a selector callback
- void menuCloseCallback(CCObject* pSender);
- void OPenQQ(CCObject* pSender);
- // preprocessor macro for "static create()" constructor ( node() deprecated )
- CREATE_FUNC(HelloWorld);
- };
- #endif // __HELLOWORLD_SCENE_H__
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::CCLayer
{
public:
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// a selector callback
void menuCloseCallback(CCObject* pSender);
void OPenQQ(CCObject* pSender);
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp,在init(),添加如下代码:
- CCMenuItemImage *pQQItem =
- CCMenuItemImage::create("Connect_logo_5.png","Connect_logo_5.png",this,menu_selector(HelloWorld::OPenQQ) );
- pCloseItem->setPosition( ccp(200,200 ));
- CCMenu* pMenu1 = CCMenu::create(pQQItem, NULL);
- this->addChild(pMenu1, 2);
CCMenuItemImage *pQQItem =
CCMenuItemImage::create("Connect_logo_5.png","Connect_logo_5.png",this,menu_selector(HelloWorld::OPenQQ) );
pCloseItem->setPosition( ccp(200,200 ));
CCMenu* pMenu1 = CCMenu::create(pQQItem, NULL);
this->addChild(pMenu1, 2);
调用弹出QQ授受的方法:
- void HelloWorld::OPenQQ(CCObject* pSender)
- {
- HSpriteCPP *sp = HSpriteCPP::hspriteWithFile("Icon.png");
- sp->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width*0.5,CCDirector::sharedDirector()->getWinSize().height*0.5-100));
- this->addChild(sp,0);
- }
void HelloWorld::OPenQQ(CCObject* pSender)
{
HSpriteCPP *sp = HSpriteCPP::hspriteWithFile("Icon.png");
sp->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width*0.5,CCDirector::sharedDirector()->getWinSize().height*0.5-100));
this->addChild(sp,0);
}
本人使用
cocos2d-x 2.0.4
,测试没问题。运行效果如下:
小弟不材,各位网友们,若有什么问题,留言反馈下喔~~~