0

私はネイティブSDKプラグインから識別番号を取得しようとしていますが、私は何を試してもそれを得ることはできません。私はデバイスから番号を取得するネイティブのAndroidアプリケーションがありますが、コードはCordovaに直接変換されません。ネイティブCordovaプラグインの値を取得してIonicに表示する

ワーキングアンドロイドコード:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Device = SdkForAndroid.getInstance(this); 

    // First, we test if the device was already initialized. 
    if (!Device.isInitialized()) { 

     Log.i(TAG, "mobile device not initialized yet"); 

     initializeSDK(); 

    } else { 

     // if we already initialized, show the Secured Objects we got 

     //Log.i(TAG, "device is initialized. deviceId: " + mobileDevice.getDeviceId()); 
     TextView textView = (TextView) findViewById(R.id.txtDeviceId); 
     textView.setText("" + Device.getDeviceId()); 
    } 
} 

Private void initializeSDK() { 
    new Thread() { 

     @Override 
     public void run() { 
      try { 
       String deviceId = Device.initialize();//hidden sdk code 

       Log.i(TAG, "initialized SDK, deviceId = " + deviceId); 
      } catch (Exception e) { 
       Log.e(TAG, "failed to initialize SDK", e); 
      } 
     } 
    }.start(); 
} 

コルドバコード:

public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
    this.callbackContext = callbackContext; 
    if (action.equals("initializeSDK")) { 
     cordova.getActivity().runOnUiThread(
      new Runnable() { 
       public void run() { 
         isInitialized(); 
        } 
       }); 
      return true; 
     } 
protected void isInitialized(){ 
        Device = SdkForAndroid.getInstance(cordova.getActivity()); 
        try{ 
         if (!Device.isInitialized()) { 
          Log.i(TAG, "mobile device not initialized yet"); 
          initSDK(); 
         } else { 
          Log.i(TAG, "mobile device is initialized. deviceId: " + Device.getDeviceId()); 
         } 
         this.callbackContext.success(mobileDevice.getDeviceId()); 
        } catch (Exception e){ 
         this.callbackContext.error("Error"); 
        } 

} 

protected void initSDK(){ 
    cordova.getThreadPool().execute(new Runnable() { 
     public void run() { 
        try{ 
         String deviceId = mobileDevice.initialize() 
          //hidden sdk code 
         Log.i(TAG, "initialized SDK, deviceId = " + deviceId); 
           callbackContext.success(deviceId); 
          } catch (Exception e){ 
           Log.e(TAG, "failed to initialize SDK", e); 
           callbackContext.error("Error"); 
          } 
       } 
      }); 
} 

Javascriptコード:

var exec = require('cordova/exec'); 

module.exports = { 
    initializeSDK: function (success, fail) { 
     cordova.exec(success, fail, 'BlueIDplugin', 'initializeSDK', []); 
    } 
}; 

イオンが

initiateSDK(){ 

    this.BlueIdPlugin.initializeSDK(
     function(success){ 
     console.log(deviceId); 
     }, 
     function(fail){ 
     console.log("Error getting device id") 
     } 
    ) 

    this.BlueIdPlugin.initializeSDK(); 
    console.log(this.BlueIdPlugin.getDeviceId()); 
    } 
をappcomponent.ts

SDKがコンソールログで初期化されるため、コードを正しくリンクしていると思います。問題は、deviceIdを表示できないことです。私は本当にイオン自体の問題と対話する方法については確信しています、私は成功コールバックを正しく呼んでいないので、私は問題が実際にそこに住んでいると信じています。助けてください!

this.callbackContext.success(mobileDevice.getDeviceId()); 

これはcallbackContextは二回呼び出され、その結果、コルドバは許可しない(あなたが明示的に要求しない限り)::(

答えて

-1

この問題は、私のプラグインの一番上にある私のパッケージ名でわかりました。プラグインは実際にIonicアプリケーションに接続していなかったので、最後に余分なフォルダディレクトリがありました。

だから、基本的に

<feature name="IDplugin"> 
     <param name="android-package" value="IdCordovaPlugin.IDplugin"/> 
    </feature> 

は、あなたのコルドバのJavaプラグイン

package IdCordovaPlugin; 

の上部にlogcatを経由してデバッグすることで、後に見つかった私の部分には本当に愚かな間違いを、パッケージ名と一致する必要があります。

-1

あなたは、デバイスが初期化されていない場合でも、二回成功コールバックを呼び出しているようです。だから、これを試してみてください。

コルドバコード:

public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
    this.callbackContext = callbackContext; 
    if (action.equals("initializeSDK")) { 
     cordova.getActivity().runOnUiThread(
      new Runnable() { 
       public void run() { 
         isInitialized(); 
        } 
       }); 
      return true; 
     } 
protected void isInitialized(){ 
    Device = SdkForAndroid.getInstance(cordova.getActivity()); 
    try{ 
     if (!Device.isInitialized()) { 
      Log.i(TAG, "mobile device not initialized yet"); 
      initSDK(); 
     } else { 
      Log.i(TAG, "mobile device is initialized. deviceId: " + Device.getDeviceId()); 
      this.callbackContext.success(Device.getDeviceId()); 
     } 
    } catch (Exception e){ 
     this.callbackContext.error("Error"); 
    } 

} 

protected void initSDK(){ 
    cordova.getThreadPool().execute(new Runnable() { 
     public void run() { 
       try{ 
        String deviceId = mobileDevice.initialize() 
         //hidden sdk code 
        Log.i(TAG, "initialized SDK, deviceId = " + deviceId); 
        callbackContext.success(deviceId); 
       } catch (Exception e){ 
        Log.e(TAG, "failed to initialize SDK", e); 
        callbackContext.error("Error"); 
       } 
     } 
    }); 
} 

appcomponent.ts:

initiateSDK(){ 
    this.BlueIdPlugin.initializeSDK(
     function(success){ 
     console.log(deviceId); 
     }, 
     function(fail){ 
     console.log("Error getting device id") 
     } 
    ) 
} 
+0

私は関数(成功)と関数(失敗)を試してもどちらも呼び出されていないようです。 –

+0

完全なコードを見ずにはるかに多くを提案できます。 Android Studioで実行し、Javaの適切なポイントにブレークポイントを配置し、リモートデバッグのためにWebViewをChrome DevToolsに接続し、適切なブレークポイントをJavascriptにも配置します。 – DaveAlden

関連する問題