2017-01-17 10 views
0

branch.io documentations에서 지점 SDK는 딥 링크 데이터를 Activity으로 보내도록 구성해야한다는 것을 알게되었습니다. 이 방법은 설치 지점의 SDK를 호출해야합니다 :분기 SDK가 활동 대신 IntentService로 데이터를 보내는 방법은 무엇입니까?

@Override 
public void onStart() 
{ 
    super.onStart(); 
    Branch branch = Branch.getInstance(); 

    branch.initSession(new Branch.BranchReferralInitListener() 
    { 
    @Override 
    public void onInitFinished(JSONObject referringParams, BranchError error) 
    { 
      if (error == null) 
      { 
       // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app 
       // params will be empty if no data found 
       // ... insert custom logic here ... 
      } 
      else 
      { 
       Log.i("MyApp", error.getMessage()); 
      } 
     } 
    }, this.getIntent().getData(), this); 
} 

@Override 
public void onNewIntent(Intent intent) 
{ 
    this.setIntent(intent); 
} 

당신이 방법 initSession()은 세 번째 입력 Activity 받아 볼 수있다. 하지만 역방향 데이터를 IntentService으로 보내고 싶습니다. 나는 뭔가를 놓치고 가지가 그 일을 할 수있는 방법을 제공합니까? 그렇지 않은 경우 어떻게 기능을 제공 할 수 있습니까? 보이지 않는 활동을 시작하고 그걸 통해 데이터를 IntentService에 전달할 수 있음을 알고 있지만 시작이 느려지는 것을 읽었습니다. 어떤 제안?

답변

1

매개 변수를 의도 서비스에 직접 전송하기 위해 SDK에 구운 것이 없습니다. 활동에서 이러한 매개 변수를 캡처하고 다른 곳으로 전달하는 것은 모든 접근 방식이 초기화 호출을 필요로하므로 다른 접근 방식보다 시간이 오래 걸리지는 않습니다.

+0

SDK는 방법을 제공합니다. 나는 그것이 단지 오용인지 또는 그것의 특징인지는 모른다. 그러나 나는 그것을 테스트했고 효과가있었습니다. 어떤 활동도 추가 할 필요가 없습니다. –

+1

안녕 Melika. 의도 한 서비스가 작동한다고해서 우리가 접근 방식을 지원할 수 있다는 의미가 아니거나 항상 안정적으로 작동 할 수 있기 때문에 데이터를 안전하게 반환하기 위해 활동 라이프 사이클 방법에 의존합니다. 나는 당신이 무언가를 요리했기 때문에 기쁘다. 그러나 단지 머리가있다. 그것은 우리가 현재 지원하고있는 것이 아니다. :). – Evan

+0

오, 당신이 지부의 한 분인 것 같습니다. 따라서 오용입니다. 답장을 보내 주셔서 감사합니다. –

1

브랜치의 소스 코드를 읽고 Activity을 입력으로 사용하지 않는 오버로드 된 메소드가 있음을 알게되었습니다. 실제로 그들은 initSessionActivity으로 설정하고 null으로 설정합니다.

/** 
* <p>Initialises a session with the Branch API.</p> 
* 
* @param callback A {@link BranchReferralInitListener} instance that will be called 
*     following successful (or unsuccessful) initialisation of the session 
*     with the Branch API. 
* @param data  A {@link Uri} variable containing the details of the source link that 
*     led to this initialisation action. 
* @return A {@link Boolean} value that will return <i>false</i> if the supplied 
* <i>data</i> parameter cannot be handled successfully - i.e. is not of a 
* valid URI format. 
*/ 
public boolean initSession(BranchReferralInitListener callback, @NonNull Uri data) { 
    return initSession(callback, data, null); 
} 

나는 위의 선언 방법을 사용하고 대신 activity의, manifestIntentService 선언 내에 필요한 모든 인 텐트 필터를 정의했다. 나는 그것을 테스트했고 효과가 있었다. 그들이 그것을 문서화했다면 좋을 것입니다.

UPDATE

그냥 오용이다. 신뢰할 수 있고 지원되는 접근 방식이 아닙니다. 보이지 않는 Activity을 만들고이를 통해 데이터를 IntentService으로 보내는 것이 좋습니다.