Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Snapchat';s SnapKit addLoginStatusObserver未侦听事件_Objective C_React Native_Snapchat - Fatal编程技术网

Objective c Snapchat';s SnapKit addLoginStatusObserver未侦听事件

Objective c Snapchat';s SnapKit addLoginStatusObserver未侦听事件,objective-c,react-native,snapchat,Objective C,React Native,Snapchat,我目前正在为Snapchat的SnapKit SDK开发一个React本机插件 我似乎无法让addLoginStatusObserver方法正常工作(此处详述),我怀疑这是因为我缺乏使用Objective C的协议/接口/实现功能的经验 下面是代码的精简版本: ... @interface RNSnapSDKListener : NSObject<SCSDKLoginStatusObserver> { ... } - (void)scsdkLoginLinkDidSucceed;

我目前正在为Snapchat的SnapKit SDK开发一个React本机插件

我似乎无法让
addLoginStatusObserver
方法正常工作(此处详述),我怀疑这是因为我缺乏使用Objective C的协议/接口/实现功能的经验

下面是代码的精简版本:

...

@interface RNSnapSDKListener : NSObject<SCSDKLoginStatusObserver> {
...
}
- (void)scsdkLoginLinkDidSucceed;
- (void)scsdkLoginLinkDidFail;
- (void)scsdkLoginDidUnlink;
...
@end

@implementation RNSnapSDKListener

- (void)scsdkLoginLinkDidSucceed{
    NSLog(@"[RNSnapSDKListener] Snapchat Did Login!");
}
- (void)scsdkLoginLinkDidFail{
    NSLog(@"[RNSnapSDKListener] Snapchat Did Fail!");
}
- (void)scsdkLoginDidUnlink{
    NSLog(@"[RNSnapSDKListener] Snapchat Did Unlink!");
}

- (void)setDelegate: (RCTEventEmitter*) eventEmitter{
    NSLog(@"[RNSnapSDKListener] Delegate Set!");
}
@end

@implementation RNSnapSDK

...

RCT_EXPORT_MODULE()

RCT_EXPORT_METHOD(initialize){
    RNSnapSDKListener *listener = [[RNSnapSDKListener alloc] init];
    [listener setDelegate:self];
    [SCSDKLoginClient addLoginStatusObserver:listener];
}

RCT_EXPORT_METHOD(login)
{
    [SCSDKLoginClient loginFromViewController:[UIApplication sharedApplication].delegate.window.rootViewController completion:^(BOOL success, NSError * _Nullable error) {
    }];
}

RCT_EXPORT_METHOD(logout: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{
    [SCSDKLoginClient unlinkAllSessionsWithCompletion:^(BOOL success) {
        NSLog(@"Logout %s", success ? "true" : "false");
        resolve(NULL);
    }];
}


RCT_EXPORT_METHOD(getUserData: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
{

    NSString *graphQLQuery = @"{me{externalId, displayName, bitmoji{avatar}}}";

    NSDictionary *variables = @{@"page": @"bitmoji"};

    [SCSDKLoginClient fetchUserDataWithQuery:graphQLQuery
        variables:variables
        success:^(NSDictionary *resources) {
            NSDictionary *data = resources[@"data"];
            resolve(data);
        } failure:^(NSError * error, BOOL isUserLoggedOut) {
            NSLog(@"%@",[error localizedDescription]);
            NSLog(@" %s", isUserLoggedOut ? "true" : "false");

            if(isUserLoggedOut){
                [SCSDKLoginClient loginFromViewController:[UIApplication sharedApplication].delegate.window.rootViewController completion:^(BOOL success, NSError * _Nullable error) {
                }];
            }else{
                reject(@"error", [error localizedDescription], error);
            }
        }];
}

NSURL *saved;

RCT_EXPORT_METHOD(authenticateDeepLink: (NSString *)url)
{
    NSURL *finalUrl = [NSURL URLWithString:url];
    saved = finalUrl;

    [SCSDKLoginClient application:[UIApplication sharedApplication] openURL:finalUrl options:[NSMutableDictionary dictionary]];

}

...

@end
。。。
@接口RNSnapSDKListener:NSObject{
...
}
-(无效)SCSDKloginlinkDidSuccess;
-(无效)scsdkLoginLinkDidFail;
-(无效)scsdkLoginDidUnlink;
...
@结束
@实现RNSnapSDKListener
-(无效)SCSDKloginLinkDidSuccess{
NSLog(@“[RNSnapSDKListener]Snapchat确实登录了!”);
}
-(无效)scsdkLoginLinkDidFail{
NSLog(@“[RNSnapSDKListener]快照聊天失败!”);
}
-(无效)scsdkLoginDidUnlink{
NSLog(@“[RNSnapSDKListener]Snapchat未取消链接!”);
}
-(void)setDelegate:(RCTEventMitter*)事件发射器{
NSLog(@“[RNSnapSDKListener]委托集!”);
}
@结束
@snapsdk的实现
...
RCT_导出_模块()
RCT\u导出\u方法(初始化){
RNSnapSDKListener*listener=[[RNSnapSDKListener alloc]init];
[listener setDelegate:self];
[SCSDKLoginClient addLoginStatusObserver:listener];
}
RCT\u导出\u方法(登录)
{
[SCSDKLoginClient loginFromViewController:[UIApplication sharedApplication].delegate.window.rootViewController完成:^(布尔成功,N错误*_可为空错误){
}];
}
RCT_导出_方法(注销:(RCTPromiseResolveBlock)解析拒绝程序:(RCTPromiseResolveBlock)拒绝)
{
[SCSDKLoginClient取消链接会话并完成:^(BOOL success){
NSLog(@“注销%s”,成功?“真”:“假”);
解析(空);
}];
}
RCT_导出_方法(getUserData:(RCTPromiseResolveBlock)解析拒绝程序:(RCTPromiseRejectBlock)拒绝)
{
NSString*graphQLQuery=@“{me{externalId,displayName,bitmoji{avatar}}}”;
NSDictionary*变量=@{@“page”:@“bitmoji”};
[SCSDKLoginClient fetchUserDataWithQuery:graphQLQuery
变量:变量
成功:^(NSDictionary*资源){
NSDictionary*数据=资源[@“数据”];
解析(数据);
}失败:^(N错误*错误,BOOL isUserLoggedOut){
NSLog(@“%@,[错误本地化描述]);
NSLog(@“%s”,isUserLoggedOut?“真”:“假”);
if(isUserLoggedOut){
[SCSDKLoginClient loginFromViewController:[UIApplication sharedApplication].delegate.window.rootViewController完成:^(布尔成功,N错误*_可为空错误){
}];
}否则{
拒绝(@“错误”,[error localizedDescription],错误);
}
}];
}
NSURL*已保存;
RCT\u导出\u方法(authenticateDeepLink:(NSString*)url)
{
NSURL*finalUrl=[NSURL URLWithString:url];
保存=最终结果;
[SCSDKLoginClient应用程序:[UIApplication sharedApplication]openURL:finalUrl选项:[NSMutableDictionary]];
}
...
@结束
.initialize()在React-Native模块内调用,并且成功调用了setDelegate()方法(打印出“委托集”-这是React-Native事件桥的委托集),但是其他[RNSnapSDKListener]不会在应该打印的时候打印(在登录或注销之后)

这是我在objective-c上犯的错误还是对Snapchat SDK的其他滥用


谢谢

问题是,
RNSnapSDKListener*监听器
需要声明为全局变量,并在initialize()内初始化-但不完全确定原因-可能是垃圾收集的问题