123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- #import "CDVWeiboSDK.h"
- NSString *WEBIO_APP_ID = @"weibo_app_id";
- NSString *WEBIO_REDIRECT_URI = @"redirecturi";
- NSString *WEBIO_DEFUALT_REDIRECT_URI = @"https://api.weibo.com/oauth2/default.html";
- NSString *WEIBO_CANCEL_BY_USER = @"cancel by user";
- NSString *WEIBO_SHARE_INSDK_FAIL = @"share in sdk failed";
- NSString *WEIBO_SEND_FAIL = @"send failed";
- NSString *WEIBO_UNSPPORTTED = @"Weibo unspport";
- NSString *WEIBO_AUTH_ERROR = @"Weibo auth error";
- NSString *WEIBO_UNKNOW_ERROR = @"Weibo unknow error";
- NSString *WEIBO_TOKEN_EMPTY = @"Weibo token is empty";
- NSString *WEIBO_USER_CANCEL_INSTALL = @"user cancel install weibo";
- @implementation CDVWeiboSDK
- /**
- * 插件初始化主要用于appkey的注册
- */
- - (void)pluginInitialize {
- NSString *weiboAppId = [[self.commandDelegate settings] objectForKey:WEBIO_APP_ID];
- self.weiboAppId = weiboAppId;
- [WeiboSDK registerApp:weiboAppId];
- NSString *redirectURI = [[self.commandDelegate settings] objectForKey:WEBIO_REDIRECT_URI];
- if (nil == redirectURI) {
- self.redirectURI = WEBIO_DEFUALT_REDIRECT_URI;
- } else {
- self.redirectURI = redirectURI;
- }
- }
- /**
- * 检查微博官方客户端是否安装
- *
- * @param command CDVInvokedUrlCommand
- */
- - (void)checkClientInstalled:(CDVInvokedUrlCommand *)command {
- if ([WeiboSDK isWeiboAppInstalled]) {
- CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
- } else {
- CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
- [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
- }
- }
- /**
- * 微博单点登录
- *
- * @param command CDVInvokedUrlCommand
- */
- - (void)ssoLogin:(CDVInvokedUrlCommand *)command {
- self.callbackId = command.callbackId;
- WBAuthorizeRequest *request = [WBAuthorizeRequest request];
- request.redirectURI = self.redirectURI;
- request.scope = @"all";
- request.userInfo = @{ @"SSO_From" : @"CDVWeiboSDK",
- @"Other_Info_1" : [NSNumber numberWithInt:123],
- @"Other_Info_2" : @[ @"obj1", @"obj2" ],
- @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
- [WeiboSDK sendRequest:request];
- }
- /**
- * 微博登出
- *
- * @param command CDVInvokedUrlCommand
- */
- - (void)logout:(CDVInvokedUrlCommand *)command {
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- NSString *token = [saveDefaults objectForKey:@"access_token"];
- [saveDefaults removeObjectForKey:@"userId"];
- [saveDefaults removeObjectForKey:@"access_token"];
- [saveDefaults removeObjectForKey:@"expires_time"];
- [saveDefaults synchronize];
- if (token) {
- [WeiboSDK logOutWithToken:token delegate:self withTag:nil];
- self.callbackId = command.callbackId;
- } else {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_TOKEN_EMPTY];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- }
- }
- /**
- * 分享网页到微博
- *
- * @param command CDVInvokedUrlCommand
- */
- - (void)shareToWeibo:(CDVInvokedUrlCommand *)command {
- self.callbackId = command.callbackId;
- WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
- authRequest.redirectURI = self.redirectURI;
- authRequest.scope = @"all";
- NSDictionary *params = [command.arguments objectAtIndex:0];
- WBMessageObject *message = [WBMessageObject message];
- WBWebpageObject *webpage = [WBWebpageObject object];
- webpage.objectID = [NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]];
- webpage.title = [self check:@"title" in:params];
- webpage.description = [NSString stringWithFormat:[self check:@"description" in:params], [[NSDate date] timeIntervalSince1970]];
- webpage.webpageUrl = [self check:@"url" in:params];
- NSString *image = [self check:@"image" in:params];
- NSData *imageData = [self processImage:image];
- webpage.thumbnailData = imageData;
- message.mediaObject = webpage;
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- NSString *token = [saveDefaults objectForKey:@"access_token"];
- WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:token];
- request.userInfo = @{ @"ShareMessageFrom" : @"CDVWeiboSDK",
- @"Other_Info_1" : [NSNumber numberWithInt:123],
- @"Other_Info_2" : @[ @"obj1", @"obj2" ],
- @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
- [WeiboSDK sendRequest:request];
- }
- /**
- * 分享图片到微博
- *
- * @param command CDVInvokedUrlCommand
- */
- - (void)shareImageToWeibo:(CDVInvokedUrlCommand *)command {
- self.callbackId = command.callbackId;
- WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
- authRequest.redirectURI = self.redirectURI;
- authRequest.scope = @"all";
- NSDictionary *params = [command.arguments objectAtIndex:0];
- WBMessageObject *message = [WBMessageObject message];
- WBImageObject *imageObject = [WBImageObject object];
- NSString *image = [self check:@"image" in:params];
- NSData *imageData = [self processImage:image];
- imageObject.imageData = imageData;
- message.imageObject = imageObject;
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- NSString *token = [saveDefaults objectForKey:@"access_token"];
- WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:token];
- request.userInfo = @{ @"ShareMessageFrom" : @"CDVWeiboSDK",
- @"Other_Info_1" : [NSNumber numberWithInt:123],
- @"Other_Info_2" : @[ @"obj1", @"obj2" ],
- @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
- [WeiboSDK sendRequest:request];
- }
- /**
- * 分享文字到微博
- *
- * @param command CDVInvokedUrlCommand
- */
- - (void)shareTextToWeibo:(CDVInvokedUrlCommand *)command {
- self.callbackId = command.callbackId;
- WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
- authRequest.redirectURI = self.redirectURI;
- authRequest.scope = @"all";
- NSDictionary *params = [command.arguments objectAtIndex:0];
- WBMessageObject *message = [WBMessageObject message];
- NSString *text = [self check:@"text" in:params];
- message.text = text;
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- NSString *token = [saveDefaults objectForKey:@"access_token"];
- WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:token];
- request.userInfo = @{ @"ShareMessageFrom" : @"CDVWeiboSDK",
- @"Other_Info_1" : [NSNumber numberWithInt:123],
- @"Other_Info_2" : @[ @"obj1", @"obj2" ],
- @"Other_Info_3" : @{@"key1" : @"obj1", @"key2" : @"obj2"} };
- [WeiboSDK sendRequest:request];
- }
- /**
- * 处理URL
- *
- * @param notification cordova传递的消息对象
- */
- - (void)handleOpenURL:(NSNotification *)notification {
- NSURL *url = [notification object];
- if ([url isKindOfClass:[NSURL class]] && [url.absoluteString hasPrefix:[@"wb" stringByAppendingString:self.weiboAppId]]) {
- [WeiboSDK handleOpenURL:url delegate:self];
- }
- }
- #pragma mark - WeiboSDKDelegate
- - (void)didReceiveWeiboResponse:(WBBaseResponse *)response {
- if ([response isKindOfClass:WBSendMessageToWeiboResponse.class]) {
- if (response.statusCode == WeiboSDKResponseStatusCodeSuccess) {
- WBSendMessageToWeiboResponse *sendMessageToWeiboResponse = (WBSendMessageToWeiboResponse *)response;
- NSString *accessToken = [sendMessageToWeiboResponse.authResponse accessToken];
- NSString *userId = [sendMessageToWeiboResponse.authResponse userID];
- NSString *expirationTime = [NSString stringWithFormat:@"%f", [sendMessageToWeiboResponse.authResponse.expirationDate timeIntervalSince1970] * 1000];
- if (accessToken && userId && expirationTime) {
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- [saveDefaults setValue:accessToken forKey:@"access_token"];
- [saveDefaults setValue:userId forKey:@"userId"];
- [saveDefaults setValue:expirationTime forKey:@"expires_time"];
- [saveDefaults synchronize];
- }
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancel) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_CANCEL_BY_USER];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeSentFail) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SEND_FAIL];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeShareInSDKFailed) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SHARE_INSDK_FAIL];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUnsupport) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNSPPORTTED];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUnknown) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNKNOW_ERROR];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeAuthDeny) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_AUTH_ERROR];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancelInstall) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_USER_CANCEL_INSTALL];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- }
- } else if ([response isKindOfClass:WBAuthorizeResponse.class]) {
- if (response.statusCode == WeiboSDKResponseStatusCodeSuccess) {
- NSMutableDictionary *Dic = [NSMutableDictionary dictionaryWithCapacity:2];
- [Dic setObject:[(WBAuthorizeResponse *)response userID] forKey:@"userId"];
- [Dic setObject:[(WBAuthorizeResponse *)response accessToken] forKey:@"access_token"];
- [Dic setObject:[NSString stringWithFormat:@"%f", [(WBAuthorizeResponse *)response expirationDate].timeIntervalSince1970 * 1000] forKey:@"expires_time"];
- NSUserDefaults *saveDefaults = [NSUserDefaults standardUserDefaults];
- [saveDefaults setValue:[(WBAuthorizeResponse *)response userID] forKey:@"userId"];
- [saveDefaults setValue:[(WBAuthorizeResponse *)response accessToken] forKey:@"access_token"];
- [saveDefaults setValue:[NSString stringWithFormat:@"%f", [(WBAuthorizeResponse *)response expirationDate].timeIntervalSince1970 * 1000] forKey:@"expires_time"];
- [saveDefaults synchronize];
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:Dic];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancel) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_CANCEL_BY_USER];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeSentFail) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SEND_FAIL];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeShareInSDKFailed) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_SHARE_INSDK_FAIL];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUnsupport) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNSPPORTTED];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUnknown) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_UNKNOW_ERROR];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeAuthDeny) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_AUTH_ERROR];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- } else if (response.statusCode == WeiboSDKResponseStatusCodeUserCancelInstall) {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:WEIBO_USER_CANCEL_INSTALL];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- }
- }
- }
- - (void)didReceiveWeiboRequest:(WBBaseRequest *)request {
- }
- #pragma mark - WBHttpRequestDelegate
- - (void)request:(WBHttpRequest *)request didFinishLoadingWithResult:(NSString *)result {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- }
- - (void)request:(WBHttpRequest *)request didFailWithError:(NSError *)error {
- CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
- [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];
- }
- /**
- 图片处理
- @param image 图片数据
- @return 图片NSdata数据
- */
- - (NSData *)processImage:(NSString *)image {
- if ([self isBase64Data:image]) {
- return [[NSData alloc] initWithBase64EncodedString:image options:0];
- } else if ([image hasPrefix:@"http://"] || [image hasPrefix:@"https://"]) {
- NSURL *url = [NSURL URLWithString:image];
- return [NSData dataWithContentsOfURL:url];
- } else {
- return [NSData dataWithContentsOfFile:image];
- }
- }
- /**
- 检查图片是不是Base64
- @param data 图片数据
- @return 结果true or false
- */
- - (BOOL)isBase64Data:(NSString *)data {
- data = [[data componentsSeparatedByCharactersInSet:
- [NSCharacterSet whitespaceAndNewlineCharacterSet]]
- componentsJoinedByString:@""];
- if ([data length] % 4 == 0) {
- static NSCharacterSet *invertedBase64CharacterSet = nil;
- if (invertedBase64CharacterSet == nil) {
- invertedBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="] invertedSet];
- }
- return [data rangeOfCharacterFromSet:invertedBase64CharacterSet options:NSLiteralSearch].location == NSNotFound;
- }
- return NO;
- }
- /**
- 检查参数是否存在
- @param param 要检查的参数
- @param args 参数字典
- @return 参数
- */
- - (NSString *)check:(NSString *)param in:(NSDictionary *)args {
- NSString *data = [args objectForKey:param];
- return data?data:@"";
- }
- @end
|