monotouch对接当乐

来源:互联网 发布:xz1 compact 知乎 编辑:程序博客网 时间:2024/04/28 16:15

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

#import "DownjoySDK/Downjoy.h"

#import "DownjoySDK/DownjoyDelegate.h"

#import "DownjoySDK/PaymemtParam.h"


typedef void (^charge_cb) (NSInteger nType);


@interface UseStaticLibraryDj : UIViewController <DownjoyDelegate>

{

    Downjoy *_demoVC;

    DownjoyLoginResult *_downjoyLoginResult;

    DownjoyMemberInfoResult *_downjoyMemberInfoResult;

    

    UIViewController *windowViews;

}

@property(retain, nonatomic)Downjoy *demoVC;

@property(retain, nonatomic) DownjoyLoginResult *downjoyLoginResult;

@property(retain, nonatomic) DownjoyMemberInfoResult *downjoyMemberInfoResult;


+(UseStaticLibraryDj *)Isrance;


/** 登陆 */

-(void)loginDj:(charge_cb)suc Fail:(charge_cb)fail cb:(charge_cb)cancel;

/** 登出(注销) */

-(void)loginOutDj:(charge_cb)suc Fail:(charge_cb)fail cb:(charge_cb)cancel;

/** 支付 */

-(void)PayForCoinDj:(charge_cb)suc Fail:(charge_cb)fail cb:(charge_cb)cancel;

/** 个人中心 */

-(void)memberCenterDj;

/** 判断是否有当乐账号登录 */

-(BOOL)downjoyIsLoginDj;

/** 得到当乐ID */

-(NSNumber* )getDjMid;

/** 得到当乐用户名 */

-(NSString* )getDjUserName;

/** 得到当乐token */

-(NSString* )getDjToken;

/** 设置一个view进来 */

-(void)setGameView:(id)windowView;


@end








#import "UseStaticLibraryDj.h"

#import "EmunHead.h"


static charge_cb   call_backs[10] = {NULL};


@interface UseStaticLibraryDj ()


@end


@implementation UseStaticLibraryDj


static UseStaticLibraryDj *instance =nil;

+(UseStaticLibraryDj *)Isrance

{

    if (instance ==nil)

    {

        instance = [[UseStaticLibraryDjalloc] init];

    }

    returninstance;

}


-(id) init{

    if(self = [superinit]){

        

    }

    return self;

}


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;

}


-(void) loadView{

}


- (void)viewDidLoad

{

    [superviewDidLoad];

// Do any additional setup after loading the view.

}


- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


//实现Downjoy协议


-(void) loginSuccess:(DownjoyLoginResult *)loginResult{

    //self.dicDownjoyLoginInfo=dictParm;

    self.downjoyLoginResult = loginResult;

//    NSString *content = [NSString stringWithFormat:@"登陆/注册成功\n乐号:%@\n用户名:%@\n昵称:%@\nstate参数:%@\n令牌:%@",

//                         loginResult.memberId, loginResult.username,

//                         loginResult.nickname, loginResult.state, loginResult.token];

//    [SINGLETON myAlertView:nil message:content delegate:self buttons:nil];

    

    [self->windowViewsdismissModalViewControllerAnimated:YES];

    [self->windowViewsremoveFromParentViewController];

    

    if (call_backs[Login_success] !=NULL) {

        call_backs[Login_success](Login_success);

    }

}


//登陆出错或取消回调

-(void) loginError:(DownjoyLoginResult *)loginResult {

    /*传回来的dicParm有五个参数

     error_code:错误代码

     error_msg:错误描述

     state:登陆时客户端传给Downjoy的数据,登陆成功后会原样传回

     */

    //self.dicDownjoyLoginInfo = dicParm;

//    NSString *content = [NSString stringWithFormat:@"登陆出错\n错误码:%@\n错误描述:%@\nstate参数:%@",

//                         loginResult.errorCode,loginResult.errorMsg,loginResult.state];

//    [SINGLETON myAlertView:nil message:content delegate:self buttons:nil];

    [self->windowViewsdismissModalViewControllerAnimated:YES];

    [self->windowViewsremoveFromParentViewController];

    if (call_backs[Login_fail] !=NULL) {

        call_backs[Login_fail](Login_fail);

    }

}


//获取用户信息成功回调

- (void) readMemberInfo: (DownjoyMemberInfoResult *)memberInfo {

    /*1.获取用户信息成功时,传回来的dicMemberInfo有五个参数

     avatar_url:用户头像地址

     created_date:建立日期

     error_code:状态码

     username:用户名

     nickname:昵称

     memberId:乐号

     gender:性别

     level:级别

     token:安全令牌

     

     2.获取用户信息失败时,传回来的dicMemberInfo有两个参数

     error_code:错误代码

     error_msg:错误描述

     */

    self.downjoyMemberInfoResult = memberInfo;

    NSString *content=[NSStringstringWithFormat:@"mid:%@,username:%@,nickname:%@,token:%@",_downjoyMemberInfoResult.memberId,_downjoyMemberInfoResult.username,_downjoyMemberInfoResult.nickname,_downjoyMemberInfoResult.token];

    

    NSString *unicodeStr = [SINGLETONunicodeToUtf8:content];

    [SINGLETONmyAlertView:nilmessage:unicodeStr delegate:selfbuttons:nil];

}


//注销回调

- (void) logoutSuccess {

    NSString *content=[NSStringstringWithFormat:@"logout ok"];

    [SINGLETONmyAlertView:nilmessage:content delegate:selfbuttons:nil];

    if (call_backs[LoginOut_success] !=NULL) {

        call_backs[LoginOut_success](LoginOut_success);

    }

}


-(void) logoutError:(NSString *)errorCode errorMsg:(NSString *)errorMsg{

    NSString *content=[NSStringstringWithFormat:@"logout error:%@, %@", errorCode, errorMsg];

    [SINGLETONmyAlertView:nilmessage:content delegate:selfbuttons:nil];

    if (call_backs[LoginOut_fail] !=NULL) {

        call_backs[LoginOut_fail](LoginOut_fail);

    }

}


//支付取消回调

- (void) payBack {

    [selfdismissModalViewControllerAnimated:YES];

}


-(void) memberCenterError:(NSString *)errorCode errorMsg:(NSString *)errorMsg{

    NSString *content = [NSStringstringWithFormat:@"进入个人中心出错\n错误码:%@\n错误描述:%@\n",errorCode,errorMsg];

    [SINGLETONmyAlertView:nilmessage:content delegate:selfbuttons:nil];

    [self->windowViewsdismissModalViewControllerAnimated:YES];

}


//自定义函数


-(void) memberCenterDownjoy{

    _demoVC =[[Downjoyalloc] initWithBaseInfo:app_idappKey :app_keydelegate :self];

    [self->windowViewspresentModalViewController:_demoVCanimated:YES];

    [_demoVC downjoyMemberCenter];

    NSLog(@"运行到个人中心代码");

//    [_demoVC release];

}


-(void) loginDownjoy{

    _demoVC =[[Downjoyalloc] initWithBaseInfo:app_idappKey :app_keydelegate :self];

//    [[self->windowViews view] addSubview:_demoVC.view];

    [self->windowViewspresentModalViewController:_demoVCanimated:YES];

//    [self presentModalViewController:_demoVC animated:YES];

    [_demoVC downjoyLogin:@"1"state:@"需要保持的数据"];

}


//获取用户信息例子

- (void) readInfoDownjoy {

    _demoVC =[[Downjoyalloc] initWithBaseInfo:app_idappKey :app_keydelegate :self];

    DownjoyMemberInfoResult *result = [_demoVCdownjoyReadMemberInfo];

    NSString *content=[NSStringstringWithFormat:@"mid:%@,username:%@,nickname:%@,token:%@", result.memberId, result.username, result.nickname, result.token];

    

    NSString *unicodeStr = [SINGLETONunicodeToUtf8:content];

    [SINGLETONmyAlertView:nilmessage:unicodeStr delegate:selfbuttons:nil];

    

}

//注销例子

- (void) logoutDownjoy {

    _demoVC =[[Downjoyalloc] initWithBaseInfo:app_idappKey :app_keydelegate :self];

    [_demoVC downjoyLogout];

}


//支付例子

- (void) paymentDownjoy {

    _demoVC =[[Downjoyalloc] initWithBaseInfo:app_idappKey :app_keydelegate :self];

    //支付需要 appId   appKey   mid   gid   sid   uif   utp   eif   merchantKey九个参数

    //其中  mid   gid   sid   uif   utp   eif   merchantKey 初始化在数据字典中

    if (![_demoVCdownjoyIsLogin]) {

        [SINGLETON myAlertView:nilmessage:@"请先登陆" delegate:self buttons:nil];

        return;

    }

    NSString *paymentParameterString = [selfgetPaymentParameterString];

    [self->windowViewspresentModalViewController:_demoVCanimated:YES];

    [_demoVC downjoyPayment : paymentParameterString];

    

}


-(NSString *) getPaymentParameterString{

    NSString *merchantKey = @"UZ/$JvBl";

    NSString *mid=[[_demoVCdownjoyReadMemberInfo].memberId stringValue];

    Payment *paymentParam=[[[Paymentalloc] initWithBaseInfo:@"12"gid:@"1" sid:@"1"uif:mid utp:@"0"eif:@"eif" merchantKey:merchantKey]autorelease];

    NSDateFormatter *formatter=[[NSDateFormatteralloc] init];

    [formatter setDateFormat:@"yyyyMMddHHmmss"];

    NSString *dateString = [formatter stringFromDate:[NSDate date]];

    [formatter release];

    NSString *uif=[paymentParam.uifstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSString *eif=[paymentParam.eifstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSString *backUrl=[URL_PAY_BACKstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    

    NSMutableString *strParmEncode=[NSMutableStringstringWithFormat:@"mid=%@&gid=%@&sid=%@&uif=%@&utp=%@&eif=%@&bakurl=%@&timestamp=%@", paymentParam.merchantId, paymentParam.gid, paymentParam.sid, uif, paymentParam.utp, eif, backUrl, dateString];

    NSMutableString *strParm=[NSMutableStringstringWithFormat:@"mid=%@&gid=%@&sid=%@&uif=%@&utp=%@&eif=%@&bakurl=%@&timestamp=%@", paymentParam.merchantId, paymentParam.gid, paymentParam.sid, paymentParam.uif, paymentParam.utp, paymentParam.eif,URL_PAY_BACK, dateString];

    NSString *strCheck=[NSStringstringWithFormat:@"%@&merchantkey=%@", strParm, paymentParam.merchantKey];

    NSString *strMd5=[[MD5Utilmd5:strCheck] lowercaseString];

    NSString *strUrlFull = [NSStringstringWithFormat:@"%@&verstring=%@", strParmEncode, strMd5];

    return strUrlFull;

}


//登陆

-(void)loginDj:(charge_cb)suc Fail:(charge_cb)fail cb:(charge_cb)cancel

{

    call_backs[Login_success] = [succopy];

    call_backs[Login_fail] = [failcopy];

    call_backs[Login_cancel] = [cancelcopy];

    

    [selfloginDownjoy];

}

//注销

-(void)loginOutDj:(charge_cb)suc Fail:(charge_cb)fail cb:(charge_cb)cancel

{

    call_backs[LoginOut_success] = [succopy];

    call_backs[LoginOut_fail] = [failcopy];

    call_backs[LoginOut_cancel] = [cancelcopy];

    

    [selflogoutDownjoy];

}

//个人中心

-(void)memberCenterDj

{

    [selfmemberCenterDownjoy];

}

//判断是否登录当乐

-(BOOL)downjoyIsLoginDj

{

    _demoVC =[[Downjoyalloc] initWithBaseInfo:app_idappKey :app_keydelegate :self];

    //支付需要 appId   appKey   mid   gid   sid   uif   utp   eif   merchantKey九个参数

    //其中  mid   gid   sid   uif   utp   eif   merchantKey 初始化在数据字典中

    BOOL isLognin = [_demoVCdownjoyIsLogin];

    [_demoVC release];

    return isLognin;

}

//支付

-(void)PayForCoinDj:(charge_cb)suc Fail:(charge_cb)fail cb:(charge_cb)cancel

{

    call_backs[LoginOut_success] = [succopy];

    call_backs[LoginOut_fail] = [failcopy];

    call_backs[LoginOut_cancel] = [cancelcopy];

    

    [selfpaymentDownjoy];

}


-(NSNumber* )getDjMid

{

    returnself.downjoyLoginResult.memberId;

}


-(NSString* )getDjUserName

{

    returnself.downjoyLoginResult.username;

}


-(NSString* )getDjToken

{

    returnself.downjoyLoginResult.token;

}


-(void)setGameView:(id)windowView

{

    self->windowViews = windowView;

}


@end






#ifndef UseStaticLibraryDJ_EmunHead_h

#define UseStaticLibraryDJ_EmunHead_h


#define   app_id    @"用具体的"

#define   app_key   @"用具体的"


enum {

    Login_success,

    Login_fail,

    Login_cancel,

    LoginOut_success,

    LoginOut_fail,

    LoginOut_cancel,

    Buy_success,

    Buy_fail,

    Buy_cancel

};


#endif




//在mono中绑定的代码

using System;

using System.Drawing;


using MonoTouch.ObjCRuntime;

using MonoTouch.Foundation;

using MonoTouch.UIKit;


namespace MonoBindingSDKDj

{

public delegatevoid XMUtilityCallback (int message);

[BaseType (typeof (NSObject))]

interface UseStaticLibraryDj {

[Static, Export ("Isrance")]

UseStaticLibraryDj Isrance ();

[Export ("initApp")]

void initApp ();

//逋サ蠖

[Export ("loginDj:Fail:cb:")]

void loginDj (XMUtilityCallback suc, XMUtilityCallback fail, XMUtilityCallback cancel);

//逋サ蜃コ

[Export ("loginOutDj:Fail:cb:")]

void loginOutDj (XMUtilityCallback suc, XMUtilityCallback fail, XMUtilityCallback cancel);


//謾ッ莉

[Export ("PayForCoinDj:Fail:cb:")]

void PayForCoinDj (XMUtilityCallback suc, XMUtilityCallback fail, XMUtilityCallback cancel);

//遉セ蛹コ荳ュ蠢

[Export ("memberCenterDj")]

void memberCenterDj ();


//蛻、譁ュ譏ッ蜷ヲ譛牙ス謎ケ占エヲ蜿キ逋サ蠖

[Export ("downjoyIsLoginDj")]

bool downjoyIsLoginDj ();


//蠕怜芦蠖謎ケ蝕D

[Export ("getDjMid")]

int getDjMid ();


//蠕怜芦蠖謎ケ千畑謌キ蜷

[Export ("getDjUserName")]

string getDjUserName ();


//蠕怜芦蠖謎ケ慎oken

[Export ("getDjToken")]

string getDjToken ();


[Export ("setGameView:")]

void setGameView(NSObject windowView);

}

}