0

本週,我通過一對夫妻綁定庫向我們的Xamarin.Forms應用程序添加了IntercomIO SDK,目前我試圖讓推送通知工作,但不久後我在MainActivity中調用PushHandlerService.Register(this)時,應用程序崩潰,說它無法找到com.google.android.gms.gcm.GcmReceiver類,該類甚至沒有被圍繞此調用的try catch塊捕獲。無法註冊Xamarin Android上的推送通知以及IntercomIO

以下是MainActivity中的方法,負責在Android上設置推送通知。

public void registerForPushNotifications() 
    { 
     try 
     { 
      GcmClient.CheckDevice(this); 
      GcmClient.CheckManifest(this); 

      //Register the app for push notifications. 
      PushHandlerService.Initialize(this); 

      //if (!GcmClient.IsRegistered(this))//Temporarily force the app to register for push notifications 
      { 
       System.Diagnostics.Debug.WriteLine("Registering"); 

       // Register for GCM 
       PushHandlerService.Register(this); 
      } 

      LocalBroadcastManager lbc = LocalBroadcastManager.GetInstance(this); 
      PushActionReceiver rec = new PushActionReceiver(this); 
      lbc.RegisterReceiver(rec, new IntentFilter("pushaction")); 
     } 
     catch (Java.Net.MalformedURLException) 
     { 
      var e = new Exception("There was an error creating the Mobile Service. Verify the URL"); 
      System.Diagnostics.Debug.Fail(String.Format(@"Exception at {0}: {1}", this.GetType().Name, e.Message)); 
      Insights.Report(e); 
     } 
     catch (Exception e) 
     { 
      System.Diagnostics.Debug.Fail(String.Format(@"Exception at {0}: {1}", this.GetType().Name, e.Message)); 
      if (e.GetType() != typeof(TaskCanceledException)) 
       Insights.Report(e); 
     } 
    } 

而在清單我增加了接收器定義對講

<receiver android:name="io.intercom.android.sdk.gcm.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"></receiver> 

的時候我不叫PushHandlerService.Register(本)的問題不會發生,但是那顯然我不能再次收到推送通知(包括我們自己系統的推送通知)

這是怎麼回事?我已經正確設置了庫和依賴項,但似乎無法找到GcmReceiver類。

回答

1

顯然,在SDK Manager中更新到最新的SDK解決了此崩潰問題。我仍然沒有收到任何推送通知,但我猜這是由於不同的問題。嘗試註冊推送通知時,至少應用程序不會再崩潰。

0

戴爾從Intercom這裏。您是否在使用任何其他第三方推送提供商,或者您是否擁有自己的GCM接收器?他們正在消耗我們的推動力,而不是傳遞他們。這在Xamarin,Phonegap,Cordova等中可能很難。因爲註冊和接收者服務通常不可用。我在下面包含了一個鏈接到我們的GCM文檔和可能與您最相關的部分。如果這無助於解決問題,請通過cordova repo:https://github.com/intercom/intercom-cordova與我們聯繫,或通過您的Intercom儀表板向我們發送電子郵件或發送電子郵件至[email protected]

我們擁有GCM文檔瀏覽:https://docs.intercom.com/configure-intercom-for-your-product-or-site/configure-intercom-for-mobile/enable-push-notifications-with-intercom-for-android-gcm

的問題,可能會導致你在困難的設置是:

步驟7.使用對講機與其他GCM設置(可選)

這僅適用於也將GCM用於自己的內容的應用程序,或者對GCM使用第三方服務。您需要更新您的GcmListenerService和您生成設備令牌的類。

您應該有一個類生成推送設備令牌並將其發送到您的後端。除了發送該令牌你的後臺,你需要將它轉發到內線,像這樣:

private final IntercomPushClient intercomPushClient = new IntercomPushClient(); 

public void onHandleIntent(Intent intent) {  
    InstanceID instanceId = InstanceID.getInstance(this); 
    String senderId = "YOUR_SENDER_ID"; 
    String token = instanceId.getToken(senderId, 
    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
    pushClient.sendTokenToIntercom(getApplication(), token); 
} 

你應該有一個擴展GcmListenerService類。該服務將消耗用於Intercom的推送。爲了讓我們得出對講推設置了GcmListenerService,像這樣:

我能取得今天的工作,我們的GCM建立不合作出於某種原因,並創建一個新的後(基於FCM
private final IntercomPushClient intercomPushClient = new IntercomPushClient(); 

public void onMessageReceived(String from, Bundle message) { 
    if (intercomPushClient.isIntercomPush(message)) { 
     intercomPushClient.handlePush(getApplication(), message); 
    } else { 
     //DO HOST LOGIC HERE 
    } 
} 
+0

)它開始按預期工作。 – zezioen