Stipop Docs | Documentation for SDK and API

Quick Implementation - React Native for iOS

You can integrate Stipop into your app in a minute by using Stipop iOS SDK.

Before you begin

Please make sure you completed all processes in Before You Begin - iOS

1. Create StipopModule and StipopEmitter

Create (StipopModule & StipopEmitter) and Implement functions using native Stipop iOS SDK.

StipopModule.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import Foundation
import Stipop
import React

@objc(StipopModule)
class StipopModule: NSObject {
  
  static let stipopButton = SPUIButton(type: .system)
  
  static let eventEmitter = RCTEventEmitter()
  
  override init(){
    super.init()
    Stipop.initialize()
  }
  
  @objc(connect:)
  func connect(_ userID: String) -> Void {
    let user = SPUser(userID: userID)
    StipopModule.stipopButton.setUser(user, viewType: .picker)
    StipopModule.stipopButton.delegate = self
    
    if let presentedViewController = RCTPresentedViewController() {
      presentedViewController.view.addSubview(StipopModule.stipopButton)
    }
  }
  
  @objc(show:isStipopShowing:callback:)
  func show(_ isKeyboardVisible: Bool, isStipopShowing: Bool, callback: RCTResponseSenderBlock) -> Void{
    StipopModule.stipopButton.sendActions(for: .touchUpInside)
    var resultBool = false
    if(isKeyboardVisible){
      if(isStipopShowing){
        resultBool = false
      } else {
        resultBool = true
      }
    } else {
      resultBool = true
    }
    callback([NSNull(), resultBool])
  }
  
  @objc(remove)
  func remove() -> Void {
    if let presentedViewController = RCTPresentedViewController() {
      StipopModule.stipopButton.endEditing(true)
      presentedViewController.view.endEditing(true)
    }
  }
}

extension StipopModule: SPUIDelegate {
  
  func onStickerSingleTapped(_ view: SPUIView, sticker: SPSticker) {
    print("Stipop : onStickerSingleTapped")
    
    var stickerDict = [String: Any]()
    stickerDict["packageId"] = sticker.packageId
    stickerDict["stickerId"] = sticker.stickerId
    stickerDict["stickerImg"] = sticker.stickerImg
    stickerDict["keyword"] = sticker.keyword
    
    StipopEmitter.shared?.sendEvent(withName: "onStickerSingleTapped", body: stickerDict)
  }
  
  func onStickerDoubleTapped(_ view: SPUIView, sticker: SPSticker) {
    print("Stipop : onStickerDoubleTapped")
    
    var stickerDict = [String: Any]()
    stickerDict["packageId"] = sticker.packageId
    stickerDict["stickerId"] = sticker.stickerId
    stickerDict["stickerImg"] = sticker.stickerImg
    stickerDict["keyword"] = sticker.keyword
    
    StipopEmitter.shared?.sendEvent(withName: "onStickerDoubleTapped", body: stickerDict)
  }
}

StipopEmitter.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import React

@objc(StipopEmitter)
class StipopEmitter: RCTEventEmitter {
  
  public static var shared:StipopEmitter?
  
  override init() {
    super.init()
    StipopEmitter.shared = self
  }
  
  override func supportedEvents() -> [String] {
    
    var eventArr: [String] = []
    eventArr.append("onStickerSingleTapped")
    eventArr.append("onStickerDoubleTapped")
    
    return eventArr
  }
}

2. Create StipopModule.m

Create StipopModule.m and Export (StipopModule & StipopEmitter).

StipopModule.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@interface RCT_EXTERN_MODULE(StipopModule, NSObject)

RCT_EXTERN_METHOD(connect:(NSString *)userID)
RCT_EXTERN_METHOD(show
                  :(BOOL *)isKeyboardVisible
                  isStipopShowing:(BOOL *)isStipopShowing
                  callback:(RCTResponseSenderBlock)callback)
RCT_EXTERN_METHOD(remove)

- (dispatch_queue_t)methodQueue
{
  return dispatch_get_main_queue();
}
+ (BOOL)requiresMainQueueSetup
{
  return YES;
}
@end

@interface RCT_EXTERN_MODULE(StipopEmitter, RCTEventEmitter)

RCT_EXTERN_METHOD(supportedEvents)

- (dispatch_queue_t)methodQueue
{
  return dispatch_get_main_queue();
}
+ (BOOL)requiresMainQueueSetup
{
  return YES;
}

@end


We’re here to help. Contact us.