在NativeScript App中注入纯Java / Obj-C代码

时间:2016-03-15 09:21:55

标签: mobile nativescript

我目前正在开发适用于Android / iOS的App,现在我正在让我的用户与Facebook互动,特别是向他们的朋友发送私信。

Facebook为iOS实现了一个SDK:

FBSDKSendButton *button = [[FBSDKSendButton alloc] init];
button.shareContent = content; 
[self.view addSubview:button];

对于android:

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

但我不确定我是否可以在NativeScript中使用这些代码片段。 有没有人对facebook发送按钮和NativeScript有任何经验,或者至少可以说明它是否可能。

非常感谢

2 个答案:

答案 0 :(得分:0)

this NativeScript plugin中做了类似的事情。它提供了Facebook登录功能,但我相信它很容易满足您的需求。

答案 1 :(得分:0)

上周我问了一个类似的问题,并且可以使用addSubview调用来这样工作:

var mainView = args.object.getViewById('main-view');
mainView.ios.addSubview(publisher.view);

我的XML看起来像:

<Page loaded="pageLoaded">
 <StackLayout id="main-view">
 </StackLayout>
</Page>

您需要在XML中创建的视图上使用ID,然后在函数的代码隐藏文件中,使用args.object.getViewById('yourViewID');创建变量,然后调用viewVariable.ios.addSubview('view-you-want-to-add');

就我而言,我的框架publisher对象就是我传递给.ios.addSubview()电话的对象。

完整的代码隐藏文件:

var vmModule = require("./main-view-model");

// moving OpenTok out of the plugin and into code base for dev.
// Will move into a plugin after
var OpenTok = {
    createSession: function(options) {
        var apiKey = 'private';
        var sessionID = 'private';
        var delegate = this;

        // Framework Method
        var session = OTSession.alloc().init();
        return session.initWithApiKeySessionIdDelegate(apiKey, sessionID, delegate);
      },
      createPublisher: function() {
        // Framework Method
        var publisher = OTPublisher.alloc().init();

        return publisher;
      }
};

function pageLoaded(args) {
    var page = args.object;
    var mainView = args.object.getViewById('main-view');
    var token = "private";
    var error = new interop.Reference();
    page.bindingContext = vmModule.mainViewModel;

    var session = OpenTok.createSession();
    // Framework Method
    session.connectWithTokenError(token, error);

    var publisher = OpenTok.createPublisher();
    // Framework Method
    publisher.initWithDelegate(publisher);
    // Native iOS Method
    mainView.ios.addSubview(publisher.view);

    var checkConnectionStatus = setInterval(function(){
      if ( session.sessionConnectionStatus == 1 ) {
          console.log('clear interval');
          clearInterval(checkConnectionStatus);
          // Framework Method
          session.publishError(publisher, null);
      }
    }, 1000);

}

exports.pageLoaded = pageLoaded;

这是我的问题,如果你仍然陷入困境,可能会提供更多见解:Nativescript addSubview